Https连接过程主要内容解析

146 阅读4分钟

问题一:https通信用的是什么加密方式? 问题二:签发机构的证书和根证书是干什么用的?先放一张图是https大概的连接过程。

https.jpg

咱们主要看上面的第三步,因为上面两个问题主要在第三步,在https链接过程中其实是即用到了对称加密又用到了非对称加密,因为对称加密的安全性不足,而非对称加密速度又大大折扣,但是到底是怎么用的呢?

答案主要在第三步,下面就对第三步进行详细的解析: 1、服务端会生成一队非对称加密的秘钥,而服务端需要把这对秘钥中的公钥传给客户端,但是如果直接传输肯定是不行的很容易被修改不安全,而且秘钥的完整性也得不到保证影响下面的加密。

2、为了保证完整性和安全性使用到了签名签名其实是对刚才的公钥,主机名等信息内容的hash值进行了证书签发机构的私钥进行加密)

3、为了解开上面的签名就需要把证书签发机构的公钥传给客户端,但是直接传肯定是不行的,不能保证完整性和安全性,按到上面的流程肯定是再生成一对秘钥,使用私钥对证书签发机构的公钥进行签名,你可能发现问题了这样不就一直公钥、签名、私钥、公钥、签名......循环下去了吗?为了防止这种情况这里引入了根证书的概念,根证书就是一个提前放到客户端的证书,这样就想刚才的哪种情况传给客户端以后,客户端首先用根证书解析证书签发机构的公钥的签名。

4、这时候发送给服务端的是公钥、签名(证书签发机构的私钥对公钥hash值的加密)、证书签发机构的公钥、证书签发机构的公钥的签名(根证书私钥对证书签发机构的公钥的hash值进行加密),客户端拿到以后首先用根证书对证书签发机构公钥的签名进行解析来验证证书签发机构公钥的完整性,得到证书签发机构的公钥以后再使用证书签发机构的公钥对服务端的公钥的签名进行解析,来验证服务端公钥的完整性。

就这样一步步的得到了服务端传过来的公钥并且也验证了公钥的完整性和安全性,因为如果任一环节的签名和公钥如果被篡改验证都通不过的,但是如果你的根证书换成了黑客的证书就另当别论了。

然后就是第四步,生成pre-master secret信息,用刚才传过来的公钥来加密,传输到服务端,服务端获取以后使用自己的私钥进行解密得到pre-secret信息,然后服务端和客户端同时使用客户端随机数、服务端随机数、pre-master secret来计算出来客户端加密秘钥、服务端加密秘钥、客户端mac加密秘钥、服务端mac加密秘钥(其实没明白这个客户端和服务端的mac加密秘钥的作用,有知道的烦请告知。。。)。到这一步所有的加密的不可缺少的秘钥就生成完毕了,之后如果客户端给服务端发内容就是客户端使用客户端加密秘钥机型加密,然后服务端使用客户端加密秘钥进行解密。如果是服务端发送给客户端,则是使用服务端加密秘钥进行加密然后到客户端在使用服务端加密秘钥进行解密。为什么要生成客户端加密秘钥和服务端加密秘钥呢,这种对称加密不是一个就行吗?其实是为了防止虽然我看不懂但是我可以原路返回给你,比如你发送一条信息为给我转100块钱,当有人劫持了这条消息,他看不懂内容因为是加密的,但是他原封不动的给你返回如果是一个秘钥就会出问题。

到这里https连接过程中主要的问题就解决完毕了,https中即用到了对称加密又用到了非对称加密,证书签发机构和根证书都是非常重要来验证服务端公钥完整性和安全性的工具。

https连接详细过程和主要名词解析可以看这篇文章