关于https握手过程
大家好,今天看了下HTTP使用SSL进行加密的过程,整个握手过程交互比较多,有个地方不太理解。流程是这样的
1、客户端浏览器给服务器发送自己支持的对称、非对称加密算法和摘要函数列表以及一个随机数。
2、服务器收到客户端的请求后选择特定的加密算法和摘要函数以及生成一个随机数,外加自己的证书发送给客户端。
3、客户端收到后先验证证书,如果证书受信就继续,否则终止。客户端从证书中获取到服务器的加密公匙,然后浏览器产生一个随机字符串作为pre-master-securet然后用服务器的公匙加密后发给服务器,告诉服务器说在后续的对称加密过程中会使用这个密匙。
4、服务器收到后用自己的私匙解密得到pre-master-securet,然后用一定的加密算法生成一个master-securet,然后加密后发给客户端,告诉客户端以后对称加密使用这个密匙。
我不解的是为什么这里会产生一个pre-master-secure和master-secure两个密匙,难道在后续的对称加密中会两端使用两个密匙进行加密解密吗?还有那些随机数是干嘛的,如果不需要验证客户端证书的数字签名的话,是不是就没什么用呢?希望大家解答一下,我这里有点糊涂。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
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,两个机器的随机性会大大增强,不容易被猜出来。
看描述,似乎客户端和服务器用的是不同的加密密钥,所以有2个。
至于随机数,是用来保证一次一密,避免中间人的重放攻击。
这些细研究呀。呵呵。