HTTPS原理



面试常客,不得不复习,太功利了


1. 互相交换密钥的机制

近代的加密方法中加密算法是公开的,而密钥确实保密的


1.1 共享密钥

加密和解密都用同一个密钥,其有个最大挑战如何安全传递密钥,拥有密钥就拥有加密解密的能力,如果被互联网转发密钥被窃听,那么就失去了加密的意义


1.2 公开密钥

加密和解密使用不同的密钥,这两把密钥叫做公钥和私钥。客户端用服务器的公钥加密内容发送出去,服务器就用自己的密钥进行解密


1.3 二者对比

公开密钥的处理更加复杂,效率更低,但没有共享密钥使用同把密钥的风险


1.4 HTTPS混用加密机制

采用共享和公开密钥混合机制,先用公开密钥将共享密钥加密发送给对方,然后确保交换的密钥安全前提下,使用共享密钥通信,综合了二者的优缺点


1.5 证明公开密钥正确性的证书

公开密钥还是存在一些问题,无法证明自身是货真价实的密钥。比如在使用交换公钥时遭到了中间人攻击,那么双方在一开始的交换密钥都被掉包,后续的通信对于中间人透明,此时需要使用证书来证明对方的身份,步骤:

  • 公认信赖的CA机构认证某个站点后,对该站点的公开密钥签名放入证书中
  • 服务器有相关请求,会响应自己的证书给客服端
  • 客户端收到证书会使用CA的公开密钥解密,然后验证签名的合法性,通过则验证了公开密钥的正确性
  • CA的公开密钥会植入浏览器内部
  • 中间虽可用CA的公钥对证书篡改,但无CA密钥是无法加密的和签名的验证的




2. HTTPS

HTTPS并非一种新协议,只是HTTP通信接口部分使用了SSL/TLS协议代替。正常HTTP直接和TCP通信,使用HTTPS时,HTTP先和SSL/TCL通信,然后后者再与TCP通信,简单就是应用层和传输层增加了SSL/TCL


SSL由网景公司提出,后标准化后称为TLS


2.1 HTTP的缺点

  • 通信使用明文
  • 不验证通信方的身份
  • 无法验证报文的完整性

由此出现了HTTPS


2.2 HTTPS安全通信机制

  1. 客户端发起连接,TCP的三次握手

--------------------HTTPS当然也是基于TCP-------------------------------------

  1. 客户端发送ClientHello,包含支持的SSL版本和组件
  2. 服务器响应ServerHello,包含上面筛选的SSL版本和组件
  3. 服务器发送CA证书
  4. 服务器发送ServerHelleDone通知客户端,最初的握手结束

------------------------第一阶段的握手协商结束------------------------------------

  1. 客服端响应ClientKeyExchange报文,包含服务器公钥加密的随机密码串(证书验证通过)
  2. 客服端响应ChangeCipherSpec报文,告诉服务器,此后采用Pre-master secret密钥加密
  3. 客户端发送Finished报文,包含至今全部报文的校验值,若服务器能加密校验值,则这次握手成功
  4. 服务器端同样响应ChangeCipherSpec报文
  5. 同样发送Finished报文
  6. 二者的Finished报文交换后,SSL建立,此后进行HTTP协议交流,受SSL保护



参考

《图解TCP/IP》


原文地址:https://www.cnblogs.com/Howlet/p/13022320.html