关于https握手过程
大家好,今天看了下HTTP使用SSL进行加密的过程,整个握手过程交互比较多,有个地方不太理解。流程是这样的
1、客户端浏览器给服务器发送自己支持的对称、非对称加密算法和摘要函数列表以及一个随机数。
2、服务器收到客户端的请求后选择特定的加密算法和摘要函数以及生成一个随机数,外加自己的证书发送给客户端。
3、客户端收到后先验证证书,如果证书受信就继续,否则终止。客户端从证书中获取到服务器的加密公匙,然后浏览器产生一个随机字符串作为pre-master-securet然后用服务器的公匙加密后发给服务器,告诉服务器说在后续的对称加密过程中会使用这个密匙。
4、服务器收到后用自己的私匙解密得到pre-master-securet,然后用一定的加密算法生成一个master-securet,然后加密后发给客户端,告诉客户端以后对称加密使用这个密匙。
我不解的是为什么这里会产生一个pre-master-secure和master-secure两个密匙,难道在后续的对称加密中会两端使用两个密匙进行加密解密吗?还有那些随机数是干嘛的,如果不需要验证客户端证书的数字签名的话,是不是就没什么用呢?希望大家解答一下,我这里有点糊涂。
Answers
pre-master-secure看前缀就知道了,是前期使用的,在完成本次握手后,将使用master-secure。
因为对称加密要比非对称的高效很多,所以第一次使用非对称,之后使用对称即可
--------------------------------------
补充:按我的理解,整个流程简单来说是
1. c端请求,s端响应并提供证书;
2. c端检查接收后生成pre-master-securet使用s端发过来的公钥加密;
3. s端接收到后使用私钥解密,并最终通过某种算法生成master-securet;
4. 后续的通信中s和c端均使用这个master-securet生成的密钥。
这样c端和s端都可以进行加密解密,所以叫对称加密。
之前c端和s端是非对称加密,即私钥可以解密公钥加密的信息,公钥可以解密私钥加密的信息,但是不能自己解密自己加密的信息。
而两个master-securet的作用是由于不信任机器随机数的随机性,所以使用pre-master-securet,这个东西是c端生成的,而由s端加密生成master-securet,两个机器的随机性会大大增强,不容易被猜出来。