Skip to content

Latest commit

 

History

History
78 lines (51 loc) · 4.61 KB

File metadata and controls

78 lines (51 loc) · 4.61 KB

HTTPS基础

目录


HTTP存在的问题

可能被窃听

  1. HTTP本身不具备加密的功能,HTTP报文使用明文方式发送
  2. 由于互联网是由联通世界各个地方的网络设施组成,所有发送和接收经过某些设备的数据都可能被截获或窥视。

认证问题

  1. 无法确认你发送到的服务器就是真正的目标服务器,可能服务器是伪装的
  2. 无法确定返回的客户端是否是按照真实意图接收的客户端,可能是伪装的客户端
  3. 无法确定正在通信的对方是否具备访问权限,Web服务器上某些重要的信息,只想发给特定用户即使是无意义的请求也会照单全收。无法阻止海量请求下的dos攻击(拒绝服务攻击)

可能被篡改

请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击被称为中间人攻击。

HTTPS定义

HTTP over SSL的简称,即工作在SSL(或TLS)上的HTTP。就是加密通信的HTTP。

工作原理

在客户端和服务器之间协商出一套对称密钥,每次发送信息之前将内容加密,收到之后解密,达到内容的加密传输。

为什么不直接用非对称加密?

非对称加密由于使用了复杂的数学原理,因此计算想当复杂,如果完全使用非对称加密来加密通信内容,会严重影响网络通信的性能。

HTTPS 连接建立的过程

HTTPS的整体思路很简单,它其实就是做了三件事:认证、密钥协商、数据加密

  • 通信双方身份的验证
  • 通信双方协商出一个安全的会话密钥,注意中间人攻击的问题
  • 使用会话密钥对称加密通信内容

下面是具体过程

  1. ClientHello: 建立TCP连接之后,客户端率先发出Client Hello消息
  2. ServerHello:服务端在收到Client Hello之后,根据客户端发来的消息内容作出回应,在这一步协商:密钥协商算法、身份验证算法、对称加密算法、摘要算法
  3. 服务器证书信任建立(Certificate) :服务端在发送ServerHello之后会立马发送服务器的证书链信息,其实 Certificate 和 Server Hello 是在同一个数据包里面的,以降低延迟
  4. Pre-masterSecret : pre-master-secret由client产生,在产生该secret之前,client和server已经交换了client_randomserver_random。然后client和server会使用一个PRF(Pseudo-Random Function)来产生master-secret
  5. 客户端通知:将使用加密通信 :通知对方我已经准备好加密通信了
  6. 客户端发送:Finished : 握手消息的完整性校验
  7. 服务器通知:将使用加密通信
  8. 服务器发送:Finished

数字签名和证书

数字签名:将原数据先用Hash函数,生成摘要,然后使用私钥,对这个摘要加密,生成数字签名(signature)。

假设发送方是张三,接收方是李四

数字签名跟随数据一起发送给李四,李四收到后,取下数字签名,用张三的公钥解密,得到信件的摘要,由此证明,这数据是从张三那里发出的。此时再对数据使用Hash函数,将得到的结果,与上一步得到的摘要进行对比,如果两者一致,就证明这数据未被修改过。

但是上面这种情况,有个问题,李四无法确定公钥真的属于张三。这个时候张三可以去找证书中心(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对张三的公钥和一些相关信息一起加密,生成数字证书(Digital Certificate)。张三拿到数字证书后,就可以放心了,以后给李四发数据,只要在签名的同时,再附上数字证书就行了。李四收到数据后,用CA的公钥解开数字证书,就可以拿到张三真实的公钥了,然后就能证明数字签名是否真的是张三签的。

证书的目的是确保公钥的合法性,它的本质就是为公钥加上数字签名(用CA的私钥来加密发送方的公钥,就成了数字签名),它的安全性由证书链顶端的根证书来保证。