文章目录
HTTPS的工作流程
HTTPS的工作流程
客户端发起连接请求:客户端(通常是浏览器)向服务器发送一个安全连接请求,使用HTTPS的URL或点击HTTPS链接触发。
服务器证书发送:服务器收到请求后,将自己的数字证书发送给客户端。证书中包含了服务器的公钥、数字签名和其他相关信息。
客户端验证证书:浏览器接收到服务器证书后,会进行一系列的验证步骤,包括验证证书是否由受信任的证书颁发机构签发,以及证书中的域名是否与目标服务器的域名相匹配。如果验证通过,客户端可以确定所连接的服务器是可信的。
密钥协商:一旦服务器证书被验证通过,客户端会生成一个随机的对称密钥,用于后续的数据加密和解密。该对称密钥通过服务器证书中的公钥进行加密,并发送给服务器。
通信加密:服务器使用其私钥解密客户端发送的对称密钥,并与客户端之间建立起一个加密的安全通道。从此之后,客户端和服务器之间的数据传输都会在此加密通道中进行,保证数据的机密性。
安全数据传输:在建立了安全通道后,客户端和服务器可以安全地传输数据了。数据在发送前,会使用对称密钥对数据进行加密,然后在接收端使用相同的对称密钥解密。
完整性检查:为了确保数据在传输过程中没有被篡改,HTTPS使用消息摘要函数进行完整性检查。接收方会对接收到的数据进行校验,并比对校验结果与发送方计算的结果是否相同。
通过上述流程,HTTPS保证了在传输过程中的数据加密、身份认证和完整性保护,提供了更安全可靠的网络通信。这使得敏感信息的传输、交易和共享在更加安全的环境下进行。
也就是说:我们介绍HTTPS,更多是在介绍后面这个S,也就是对HTTP的加密方式。
部署Harbor可参考上一篇文章
linux rocky 9.4部署和管理docker harbor私有源
生成自签证书
1.修改/etc/hosts文件
[root@harbor ~]# cat /etc/hosts
192.168.0.200 yunzhidong.harbor.com
这里我们使用yunzhidong.harbor.com 这个域名访问Harbor Web服务
https>https://i-blog.csdnimg.cn/direct/86b9f3928167498483bf8a14d1b952ef.png" alt="在这里插入图片描述" />
2.生成证书
a.创建存放证书路径
[root@harbor ~]# mkdir -pv /usr/local/ssl
[root@harbor ~]# cd /usr/local/ssl/
https>https://i-blog.csdnimg.cn/direct/73c8ae85a39a4ac39f852e80a90b47ea.png" alt="在这里插入图片描述" />
b.创建ca.key密钥
[root@harbor ssl]# openssl genrsa -out ca.key 4096
[root@harbor ssl]# ls
ca.key
[root@harbor ssl]#
https>https://i-blog.csdnimg.cn/direct/bfc3f89cce1a490aa0d0f82914615595.png" alt="在这里插入图片描述" />
c.创建ca.crt
– 提示:可将下面信息修改成自己的信息
[root@harbor ssl]# openssl req -x509 -new -nodes -sha512 -days 365 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=Harbor Root CA" -key ca.key -out ca.crt
[root@harbor ssl]# ls
ca.crt ca.key
[root@harbor ssl]#
https>https://i-blog.csdnimg.cn/direct/f9e6110458e74363b231ed431d25f714.png" alt="在这里插入图片描述" />
harborcomkey_60">d.创建给Harbor服务器使用密钥 yunzhidong.harbor.com.key
提示:需要把yunzhidong.harbor.com 改成自己的域名,并且同hosts文件内相同
[root@harbor ssl]# openssl genrsa -out yunzhidong.harbor.com.key 4096
[root@harbor ssl]# ls
ca.crt ca.key yunzhidong.harbor.com.key
[root@harbor ssl]#
https>https://i-blog.csdnimg.cn/direct/230f05055d2047ac826ecc9664784d37.png" alt="在这里插入图片描述" />
harborcomcsr_72">e.创建给Harbor服务器使用证书签名请求文件 yunzhidong.harbor.com.csr
[root@harbor ssl]# openssl req -sha512 -new -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yunzhidong.harbor.com" -key yunzhidong.harbor.com.key -out yunzhidong.harbor.com.csr
[root@harbor ssl]#
[root@harbor ssl]# ls
ca.crt ca.key yunzhidong.harbor.com.csr yunzhidong.harbor.com.key
[root@harbor ssl]#
https>https://i-blog.csdnimg.cn/direct/df9b6c25274141868296de4b4be23f80.png" alt="在这里插入图片描述" />
f.构建用于域名配置的 v3.ext 文件
– 提示这里只需要修改DNS.1=域名
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names[alt_names]
DNS.1=yunzhidong.harbor.com
EOF
https>https://i-blog.csdnimg.cn/direct/e1f5242dcf7340e5b6ef1aaca8774972.png" alt="在这里插入图片描述" />
harborcomcrt_101">g.生成客户端数字证书yunzhidong.harbor.com.crt
[root@harbor ssl]# openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in yunzhidong.harbor.com.csr -out yunzhidong.harbor.com.crt
https>https://i-blog.csdnimg.cn/direct/c53fa3c504a941f597fc3d5049713641.png" alt="在这里插入图片描述" />
harborcomcert_108">h.生成证书yunzhidong.harbor.com.cert
[root@harbor ssl]# openssl x509 -inform PEM -in yunzhidong.harbor.com.crt -out yunzhidong.harbor.com.cert
执行好,步骤abcdefgh
会生成8个文件
ca.crt ca.key ca.srl v3.ext yunzhidong.harbor.com.crt yunzhidong.harbor.com.csr yunzhidong.harbor.com.key
https>https://i-blog.csdnimg.cn/direct/a7d482196fc6446eb98d9b28105cec37.png" alt="在这里插入图片描述" />
Harbor 启用https>https 需要ca.crt ,yunzhidong.harbor.com.key,yunzhidong.harbor.com.crt
Docker配置证书需要 ca.crt ,yunzhidong.com.key ,yunzhidong.harbor.com.cert
linux系统或者windows系统信任证书需要ca.crt
配置证书
harboryml_128">编辑harbor.yml
1.把hostname: yunzhidong.harbor.com 改成自己的域名
2.指定刚才证书存放路径
https>https:# https>https port for harbor, default is 443port: 443# The path of cert and key files for nginxcertificate: /usr/local/ssl/yunzhidong.harbor.crtprivate_key: /usr/local/ssl/yunzhidong.harbor.key
https>https://i-blog.csdnimg.cn/direct/66032b2cf8f04e8a9c35b8f18bd01c31.png" alt="在这里插入图片描述" />
3.[root@harbor harbor]# ./install.sh
https>https://i-blog.csdnimg.cn/direct/dcdf5410d0104c5189316c50ba4947ec.png" alt="在这里插入图片描述" />
https>https://i-blog.csdnimg.cn/direct/bd8dac1abcdc40589ca599fef15d55a1.png" alt="在这里插入图片描述" />
4.WEB验证
使用IP登录,自动跳转https>https登录
https>https://i-blog.csdnimg.cn/direct/7faa20f6f9e7438bb7487b15627feaf8.png" alt="在这里插入图片描述" />
5.将刚才生成的ca.crt证书拿到本地电脑安装证书
https>https://i-blog.csdnimg.cn/direct/24075685f244490b90d7201b22fc4e6e.png" alt="在这里插入图片描述" />https>https://i-blog.csdnimg.cn/direct/da9b06215f604d5fb719f2532cab19e0.png" alt="在这里插入图片描述" />
https>https://i-blog.csdnimg.cn/direct/dfd3cd6b2aa54f4384283483f07c4ef8.png" alt="在这里插入图片描述" />
C:\Windows\System32\drivers\etc\hosts,类似/etc/hosts
添加192.168.0.200 yunzhidong.harbor.com
https>https://i-blog.csdnimg.cn/direct/bc7a796759244ff8826f6131df2f3a77.png" alt="在这里插入图片描述" />
6.域名访问
https>https://i-blog.csdnimg.cn/direct/89364c38bd444d1a96c921c37262ee4a.png" alt="在这里插入图片描述" />
7.curl测试访问
[root@harbor harbor]# curl -i https>https://yunzhidong.harbor.com报错:
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https>https://curl.se/docs/sslcerts.htmlcurl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
https>https://i-blog.csdnimg.cn/direct/15fc56a3fa114ad4a7c7624047d9b14d.png" alt="在这里插入图片描述" />
报错原因是:linux 没有安装ca.crt证书或者docker没有添加证书,这里有两种办法解决。
或者我们先curl -k 跳过证书访问试下
[root@harbor harbor]# curl -i -k https>https://yunzhidong.harbor.com
HTTP/1.1 200 OK
https>https://i-blog.csdnimg.cn/direct/32675d104fba49b3a14c74e6e28eeb7a.png" alt="在这里插入图片描述" />8.linux 信任证书,不同linux 系统不同的文件目录
我这里是Rocky Linux release 9.4 (Blue Onyx)
[root@harbor harbor]# cat /etc/redhat-release
Rocky Linux release 9.4 (Blue Onyx)
https>https://i-blog.csdnimg.cn/direct/3f253474afce42069afb91043c6962e5.png" alt="在这里插入图片描述" />
复制ca.crt证书到 /etc/pki/ca-trust/source/anchors/
[root@harbor harbor]# cp /usr/local/ssl/ca.crt /etc/pki/ca-trust/source/anchors/
然后执行信任操作
[root@harbor harbor]# update-ca-trust
我们再次尝试 [root@harbor harbor]# curl -i https>https://yunzhidong.harbor.com
不再报错,如果还是不行,请重启Harbor和docker服务。
https>https://i-blog.csdnimg.cn/direct/ec16be6e56414b8a8c88e57bee07e3d5.png" alt="在这里插入图片描述" />
并且在为配置docker证书的情况下,依然能使用docker登录harbor
[root@harbor harbor]# docker login https>https://yunzhidong.harbor.com
https>https://i-blog.csdnimg.cn/direct/25fb0161e8a540bc9b25f6caef55dfa4.png" alt="在这里插入图片描述" />
9.取消linux 信任证书
[root@harbor harbor]# rm -rf /etc/pki/ca-trust/source/anchors/ca.crt
[root@harbor harbor]# update-ca-trust
[root@harbor harbor]#
curl -i 无法正常登录,证明删除信任成功
https>https://i-blog.csdnimg.cn/direct/0b59197ec89341758751138fc76f45ab.png" alt="在这里插入图片描述" />
[root@harbor harbor]# docker-compose down
[root@harbor harbor]# systemctl restart docker
[root@harbor harbor]# docker-compose up -d[root@harbor harbor]# docker login https>https://yunzhidong.harbor.com 也无法使用
https>https://i-blog.csdnimg.cn/direct/1da7e80b90344e95b1a821ca2dbf2a47.png" alt="在这里插入图片描述" />
配置Docker证书
10.配置Docker证书
https>https://goharbor.io/docs/2.11.0/install-config/configure-https>https/
此链接也有官方生成证书教程
https>https://i-blog.csdnimg.cn/direct/b84355ff85ad451086e1aa288e115ab8.png" alt="在这里插入图片描述" />
很明显,/etc/docker/certs.d/ 是存放docker证书的路径
所以我们创建此路径并把证书拷贝至此。
[root@harbor harbor]# ls /etc/docker/
daemon.json
[root@harbor harbor]# mkdir -pv /etc/docker/certs.d
mkdir: created directory '/etc/docker/certs.d'
[root@harbor harbor]# cd /etc/docker/certs.d/
[root@harbor certs.d]# ls
创建跟生成证书时和/etc/hosts 域名相同的目录
[root@harbor certs.d]# mkdir -pv yunzhidong.harbor.com
mkdir: created directory 'yunzhidong.harbor.com'
[root@harbor certs.d]# cd yunzhidong.harbor.com/
[root@harbor yunzhidong.harbor.com]# pwd
/etc/docker/certs.d/yunzhidong.harbor.com
[root@harbor yunzhidong.harbor.com]#
https>https://i-blog.csdnimg.cn/direct/9a6faf8c880b4628aa3301ef0dbe298b.png" alt="在这里插入图片描述" />
https>https://i-blog.csdnimg.cn/direct/6931830a6e824529b30ff3ecabf75c27.png" alt="在这里插入图片描述" />拷贝证书
[root@harbor yunzhidong.harbor.com]# ls
[root@harbor yunzhidong.harbor.com]# cp /usr/local/ssl/ca.crt /etc/docker/certs.d/yunzhidong.harbor.com/
[root@harbor yunzhidong.harbor.com]# cp /usr/local/ssl/yunzhidong.harbor.com.cert /etc/docker/certs.d/yunzhidong.harbor.com/
[root@harbor yunzhidong.harbor.com]# cp /usr/local/ssl/yunzhidong.harbor.com.key /etc/docker/certs.d/yunzhidong.harbor.com/
[root@harbor yunzhidong.harbor.com]# ls
ca.crt yunzhidong.harbor.com.cert yunzhidong.harbor.com.key
[root@harbor yunzhidong.harbor.com]#
重启docker服务
[root@harbor yunzhidong.harbor.com]# systemctl restart docker
[root@harbor yunzhidong.harbor.com]# docker login https>https://yunzhidong.harbor.com
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https>https://docs.docker.com/engine/reference/commandline/login/#credential-storesLogin Succeeded
[root@harbor yunzhidong.harbor.com]#
https>https://i-blog.csdnimg.cn/direct/ae71653512ca4240a4ec48f954d76d65.png" alt="在这里插入图片描述" />
并且 curl -i 无法登录,证明docker证书生效
[root@harbor yunzhidong.harbor.com]# curl -i https>https://yunzhidong.harbor.com
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https>https://curl.se/docs/sslcerts.htmlcurl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
https>https://i-blog.csdnimg.cn/direct/d1dd89cd9197424d9a785f976c7c4850.png" alt="在这里插入图片描述" />
现在全球都在推进 SSL 安全加密,越来越多的网站采用了 HTTPS 访问,没有启用 HTTPS 的网站可能即将在 浏览器 里禁止访问了,刚刚我没装ca.crt证书在本地电脑上,压根不能使用域名web访问。