天天看点

openssl加密http网站过程2

所以https总共有两种加密方式。

https两种方式

1.白话Https  这种加密方式与openssl加密http网站过程1中加密方式不同

<a href="http://www.cnblogs.com/xinzhao/p/4949344.html" target="_blank">http://www.cnblogs.com/xinzhao/p/4949344.html</a>

<a href="https://s4.51cto.com/wyfs02/M01/9B/B5/wKioL1lmGRnBKP0nAAC9UFHzwjU305.png-wh_500x0-wm_3-wmp_4-s_3986529697.png" target="_blank"></a>

<a href="https://s3.51cto.com/wyfs02/M00/9B/B5/wKioL1lmGSXiAnzRAAFhCQcaUkg121.png-wh_500x0-wm_3-wmp_4-s_2354146804.png" target="_blank"></a>

1.client

信息:客户端公钥,客户端会话密钥

使用服务器公钥加密

2.server

信息:服务器会话密钥

使用客户端公钥加密

3.client

使用客户端会话密钥加密后的http数据

4.server

使用服务器会话加密后的http数据

2.我们来一起说说HTTPS中间人攻击与证书校验

http://wzlinux.blog.51cto.com/8021085/1908856

<a href="https://s5.51cto.com/wyfs02/M02/9B/B5/wKiom1lmGTDxAFcLAAOqlcusP2c105.jpg-wh_500x0-wm_3-wmp_4-s_1749498083.jpg" target="_blank"></a>

1.客户端在验证证书有效之后发送ClientKeyExchange消息,ClientKeyExchange消息中,会设置48字节的premaster secret(因为的TLS版本的原因,这里没有显示premaster),通过密钥交换算法加密发送premaster secret的值,例如通过 RSA公钥加密premaster secret的得到Encrypted PreMaster传给服务端。PreMaster前两个字节是TLS的版本号,该版本号字段是用来防止版本回退攻击的。

    从握手包到目前为止,已经出现了三个随机数(客户端的random_c,服务端的random_s,premaster secret),使用这三个随机数以及一定的算法即可获得对称加密AES的加密主密钥Master-key,主密钥的生成非常的精妙。

2.server端知道premaster secret和Master-key

可以进行验证

验证加密算法的有效性,结合之前所有通信参数的 hash 值与其它相关信息生成一段数据,采用协商密钥 session secret 与算法进行加密,然后发送给服务器用于数据与握手验证,通过验证说明加密算法有效

4.同样的,服务端也会发送一个Encrypted Handshake Message供客户端验证加密算法有效性

再看一种过程

openssl加密http网站过程2

浏览器对服务器发送了一次请求,包含协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。

服务器确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。

浏览器确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给服务器。

服务器使用自己的私钥,获取浏览器发来的随机数(即Premaster secret)。

服务器和浏览器根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1946866,如需转载请自行联系原作者

继续阅读