所以https总共有两种加密方式。
https两种方式
1.白话Https 这种加密方式与openssl加密http网站过程1中加密方式不同
http://www.cnblogs.com/xinzhao/p/4949344.html
1.client
信息:客户端公钥,客户端会话密钥
使用服务器公钥加密
2.server
信息:服务器会话密钥
使用客户端公钥加密
3.client
使用客户端会话密钥加密后的http数据
4.server
使用服务器会话加密后的http数据
2.我们来一起说说HTTPS中间人攻击与证书校验
http://wzlinux.blog.51cto.com/8021085/1908856
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
可以进行验证
3.client
验证加密算法的有效性,结合之前所有通信参数的 hash 值与其它相关信息生成一段数据,采用协商密钥 session secret 与算法进行加密,然后发送给服务器用于数据与握手验证,通过验证说明加密算法有效
4.同样的,服务端也会发送一个Encrypted Handshake Message供客户端验证加密算法有效性
再看一种过程
浏览器对服务器发送了一次请求,包含协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
服务器确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。
浏览器确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给服务器。
服务器使用自己的私钥,获取浏览器发来的随机数(即Premaster secret)。
服务器和浏览器根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。