HTTPS加密传输过程

​HTTPS​​​全称​​Hyper Text Transfer Protocol over SecureSocket Layer​​​,是以安全为目标的​​HTTP​​​通道,在​​HTTP​​​的基础上通过传输加密和身份认证保证了传输过程的安全性。​​HTTPS​​​在​​HTTP​​​的基础下加入​​SSL​​​层,​​HTTPS​​​的安全基础是​​SSL​​​,因此加密的详细内容就需要​​SSL​​。

知识储备

HTTP

​HTTP​​​是应用层协议,默认运行在​​80​​​端口,是一种不安全的传输协议,经其传输的数据都是未加密的明文数据,可以被中间人攻击,获取到你的网络传输数据,这也就是尽量不要使用公共场所​​WIFI​​的原因。

HTTPS

​HTTPS​​​是应用层协议,默认运行在​​443​​​端口,是一种安全的传输协议,通过在​​HTTP​​​层与运输层的​​TCP​​直接加入一个加密/身份验证层来保证安全传输。

SSL

​SSL​​​安全套接层​​Secure Sockets Layer​​​,位于​​TCP/IP​​​协议与各种应用层协议之间,为数据通讯提供安全支持。​​SSL​​​协议可分为两层:
​​​SSL​​​记录协议​​SSL Record Protocol​​​:它建立在可靠的传输协议如​​TCP​​​之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
​​​SSL​​​握手协议​​SSL Handshake Protocol​​​:它建立在​​SSL​​记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

TLS

​TLS​​​传输层安全性协议​​Transport Layer Security​​​用于在两个通信应用程序之间提供保密性和数据完整性,其由​​TLS​​​记录协议和​​TLS​​​握手协议组成。​​TLS1.0​​​即为​​SSL3.0​​​的标准化版本,​​SSL​​​最初由网景​​Netscape​​​提出研发,在​​SSL3.0​​​时由国际互联网工程任务组​​IETF​​​进行了标准化并添加了少量机制,并更名为​​TLS1.0​​。

对称加密

简单来说对称加密的加密密钥和解密密钥是相同的,对称加密的效率要比非对称加密高。

非对称加密

简单来说非对称加密的加密密钥与解密密钥是不同的,需要一把公钥与一把私钥,私钥不能被其他任何人知道,公钥则可以随意公开。公钥加密,私钥解密;私钥数字签名,公钥验证。

CA

由于公钥是放在服务器的,在建立连接的过程中将公钥传输到用户,但是如何避免中间人攻击,即在传输公钥的过程中避免劫持,于是引入第三方认证权威机构​​CA​​​,大多数操作系统的​​CA​​​证书是默认安装的,​​CA​​​也拥有一个公钥和私钥。任何人都可以得到​​CA​​​的证书,其包含公钥,用以验证它所签发的证书。​​CA​​​为服务申请者颁发证书,在​​CA​​​判明申请者的身份后,便为他分配一个公钥,并且​​CA​​​将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。如果一个用户想鉴别一个证书的真伪,他就用​​CA​​​的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。证书实际是由证书签证机关​​CA​​签发的对用户的公钥的认证。

传输过程

  1. 首先​​TCP​​​三次握手建立链接,这是数据传输基础,在此之上开始​​SSL​
  2. 客户端首先发送​​Client Hello​​​开始​​SSL​​​通信,报文中包含客户端支持的​​SSL​​​版本、随机值​​Random1​​、加密算法以及密钥长度等。
  3. 服务器发送​​Server Hello​​​,和客户端一样,在报文中包含​​SSL​​​版本、随机值​​Random2​​以及加密组件,此后服务端将证书也发送到客户端。
  4. 此时客户端需要对服务端发送的证书进行验证,通过操作系统内置的​​CA​​​证书,将服务器发送的证书的数字签名进行解密,并将证书的公钥进行相同算法的​​HASH​​与解密的数字签名解密的内容进行对比,验证证书是否合法有效,是否被劫持更换。
  5. 客户端验证证书合法,然后生成一个随机值​​Random3​​​,用公钥对​​Random3​​​进行加密,生成​​Pre-Master Key​​​,客户端以​​Client Key Exchange​​​报文将​​Pre-Master Key​​​发送到服务端,此后发送​​Change Cipher Spec​​报文表示此后数据传输进行加密传输。
  6. 服务端将​​Pre-Master Key​​​用自己的私钥解密为​​Random3​​​,服务端发送​​Change Cipher Spec​​报文表示此后数据传输进行加密传输。
  7. 此时客户端与服务端都拥有三个随机字符串,且​​Random3​​是密文传输的,是安全状态的,此时则可以使用这三个字符串进行对称加密传输。由于非对称加密慢,不能每次传输数据都进行非对称加密,所以使用非对称加密将密钥协商好然后使用对称加密进行数据传输。
  8. 此时便正常进行​​HTTP​​​数据传输,但是由于​​SSL​​​加密的作用,此时的​​HTTP​​​传输便是安全的,此为​​HTTPS​​​的传输过程,其中​​2​​​、​​3​​​、​​5​​​、​​6​​​也被称为​​SSL​​四次握手。

每日一题

https://github.com/WindrunnerMax/EveryDay