目录

简介

对称密钥加密

公开密钥加密

认证

HTTPS中的混合加密

https解决的问题

使用Wireshark抓包https

第一步,Client Hello。

第二步,Server Hello。

第三步,Certificate、Server Key Exchange、ServerHello Done。

第四步,Client Key Exchange、Change Cipher Spec、Encrypted Handshake Message。

第五步,New Session Ticket、Change Cipher Spec、Encrypted Handshake Message。

参考


简介

在学习https中,接触到https(http + ssl)使用混合加密的方式保证通信安全。首先,学习了以下几个概念:

对称密钥加密

通信的双方使用同一个密钥对信息进行加密和解密,优点是加解密速度快,缺点是密钥没法可靠分发(如果密钥可以可靠分发,那消息也应该可以)。

公开密钥加密

使用一对非对称的密钥,私钥保存在本地,公钥可以公开。发送密文的一方使用对方的公钥进行加密,接收方收到后,使用自己的私钥进行解密。优点是解密的私钥不需要进行分发。缺点是加解密速度慢,同时公钥可能被替换。

认证

CA(Certificate Authority),证书授权中心。为了防止公钥被替换,CA提供认证服务。

服务端的工作人员首先会提供自己的公钥给CA进行认证,CA会对服务端的资质等信息进行审核,如信息审核通过,CA 会向申请者签发认证文件-证书。证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名。

签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名;

具体流程:

  1. 客户端 C 向服务器 S 发出请求时,S 返回证书文件;
  2. 客户端 C 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA 的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;
  3. 客户端然后验证证书相关的域名信息、有效时间等信息;客户端会内置信任 CA 的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA 的证书,证书也会被判定非法。

在这个过程注意几点:

  • 申请证书不需要提供私钥,确保私钥永远只能服务器掌握;
  • 证书的合法性仍然依赖于非对称加密算法,证书主要是增加了服务器信息以及签名;
  • 内置 CA 对应的证书称为根证书,颁发者和使用者相同,自己为自己签名,即自签名证书;
  • 证书=公钥+申请者与颁发者信息+签名;

HTTPS中的混合加密

简单的说,客户端和服务端首先使用公开密钥加密的方法传输对称加密密钥,为了防止公钥在被替换,服务端会对自己的公钥向CA申请认证,客户端确认了证书后,双发使用对称密钥加密的方法进行通信。下面是图解http中的流程图:

wireshark怎么复制 wireshark导入密钥_客户端

https解决的问题

  • 防监听 
  • 数据是加密的,所以监听得到的数据是密文,hacker看不懂。
  • 防伪装 
  • 伪装分为客户端伪装和服务器伪装,通信双方携带证书,证书相当于身份证,有证书就认为合法,没有证书就认为非法,证书由第三方颁布,很难伪造
  • 防篡改 
  • https对数据做了摘要,篡改数据会被感知到。hacker即使从中改了数据也白搭。

使用Wireshark抓包https

抓的网站是 www.blog.csdn.net ,ping出来的地址是 47.95.47.253, 在Wireshark中筛选出来的结果如下:

wireshark怎么复制 wireshark导入密钥_客户端_02

第一步,Client Hello。

可以看到,客户端提供了一个随机数(和当前的时间戳和一个随机数有关),后面生产对称密钥有关;一个加密算法列表,供服务器选择。

wireshark怎么复制 wireshark导入密钥_服务器_03

第二步,Server Hello。

也提供了一个随机数,并且选择了使用一种SHA256算法。

wireshark怎么复制 wireshark导入密钥_服务器_04

第三步,Certificate、Server Key Exchange、ServerHello Done。

接下来一个一个看。

wireshark怎么复制 wireshark导入密钥_wireshark怎么复制_05

Certificate,可以看到服务器提供了两个证书,证书包括一长串数字(签名),和一些明文信息,第一个公司就是csdn(域名,行业啥的),第二个是一个提供ssl服务的公司。

wireshark怎么复制 wireshark导入密钥_客户端_06

Server Key Exchange,使用ECDH(Ellipticcurve Diffie–Hellman)算法交换公钥。

wireshark怎么复制 wireshark导入密钥_wireshark_07

Server Hello Done里没啥,就是告诉客户端,服务器和你hello完了。

wireshark怎么复制 wireshark导入密钥_服务器_08

第四步,Client Key Exchange、Change Cipher Spec、Encrypted Handshake Message。

客户端使用服务器提出的ECDH算法交换密钥,改变编码,加密握手信息。

wireshark怎么复制 wireshark导入密钥_服务器_09

第五步,New Session Ticket、Change Cipher Spec、Encrypted Handshake Message。

New Session Ticket:包含了一个加密通信所需要的信息,这些数据采用一个只有服务器知道的密钥进行加密。目标是消除服务器需要维护每个客户端的会话状态缓存的要求。这部分内容在后面的扩展部分会讲到

Change Cipher Spec:编码改变通知。这一步是服务端通知客户端后面再发送的消息都会使用加密,也是一条事件消息。

Encrypted Handshake Message:这一步对应的是 Server Finish 消息,服务端也会将握手过程的消息生成摘要再用秘钥加密,这是服务端发出的第一条加密消息。客户端接收后会用秘钥解密,能解出来说明协商的秘钥是一致的。

wireshark怎么复制 wireshark导入密钥_wireshark_10

到这里双方SSL/TLS握手完成,后面就是用对称密钥加密的消息了。

wireshark怎么复制 wireshark导入密钥_wireshark怎么复制_11

参考

https://www.jianshu.com/p/a3a25c6627ee


https://zhidao.baidu.com/question/2144656506602959108.html

https://book.douban.com/subject/25863515/