HTTP超文本传输协议用于在web浏览器和网站服务器之间传递信息,有以下缺点:
1、通信使用明文,内容可能被窃听
2、不验证对方的身份
3、无法验证报文的完整性
所以HTTPS就来了,其中S代表SSL或者TLS,就是在原来HTTP的基础上加上一层用于数据加密、解密、身份认证的安全层,所以:
HTTP+加密+认证+完整性保护 = HTTPS
加密:
对称加密:加密和解密使用同一个密钥,特点时速度快,效率高,常见算法AES
非对称加密:加密和解密使用不同的密钥,分别叫私钥和公钥,数据使用私钥加密后必须使用公钥解密;使用公钥加密后必须使用私钥解密。
一般来说私钥自己保存好,公钥发布出去,这种方式的缺点是速度慢,常见的是RSA算法,一般用于交换对称加密的密码。
CA证书
CA证书是由CA机构发布的数字证书,内容包括电子签证机关的信息、公钥用户信息、公钥、签名和有效期:
证书 = 公钥 + 签名 + 申请者和颁发者的信息
HTTPS单向认证过程:
后面文章会讲到部署方法,部署时候会在服务端放服务器的证书server.crt(包含公钥)和私钥server.key,其中server.crt是通过CA机构颁发的,颁发时会有认证机构的根证书ca.crt;
会在客户端放CA的根证书ca.crt用来校验服务端的证书。
(1)客户端发起HTTPS请求,将SSL协议版本的信息发送给服务端。
(2)服务端CA证书server.crt发送给客户端
(3)客户端读取CA证书的明文信息,采用相同的hash散列函数计算得到信息摘要,然后用CA的公钥去解密签名(因为签名是用CA的私钥加密的),对比证书中的信息摘要。如果一致,则证明证书是可信的,然后取出了服务端公钥。
(4)客户端生成一个随机数(密钥F),用刚才等到的服务端公钥去加密这个随机数形成密文,发送给服务端。
(5)服务端用自己的私钥去解密这个密文,得到了密钥F
(6)服务端和客户端在后续通讯过程中就使用这个密钥F进行通信了。和之前的非对称加密不同,这里开始就是一种对称加密的方式
HTTPS双向认证
部署时候会在服务器中存放server.crt, server.key, ca.crt(用来验证客户端身份)
客户端会存放client.crt, client.key, ca.crt
双向认证和单向认证差不多,多了一步服务器验证客户端的身份:
(1)客户端发起HTTPS请求,将SSL协议版本的信息发送给服务端。
(2)服务端CA证书server.crt发送给客户端
(3)客户端读取CA证书的明文信息,采用相同的hash散列函数计算得到信息摘要,然后用CA的公钥去解密签名(因为签名是用CA的私钥加密的),对比证书中的信息摘要。如果一致,则证明证书是可信的,然后取出了服务端公钥。
(4)客户端发送自己的客户端证书client.crt(包含客户端公钥),并告知支持的加密方式
(5)服务器收到client.crt后验证,验证通过后得到公钥,通过公钥加密选择的加密方式告知客户端
(6)客户端收到加密方式后,使用私钥解密,并生成一个随机数(密钥F),用服务端公钥去加密这个随机数形成密文,发送给服务端。
(7)服务端用自己的私钥去解密这个密文,得到了密钥F
(8)服务端和客户端在后续通讯过程中就使用这个密钥F进行通信了。和之前的非对称加密不同,这里开始就是一种对称加密的方式
HTTPS认证二: openssl生成证书及签名 :https://blog.csdn.net/egbert123/article/details/103831808
HTTPS认证三:用docker搭建nginx https服务器https://blog.csdn.net/egbert123/article/details/103832083
HTTPS认证四:使用开源libcurl进行SSL双向认证https://blog.csdn.net/egbert123/article/details/103832664