图解HTTP读书笔记-(七 确保安全的HTTPS)
七 确保安全的HTTPS
7.1 HTTP的缺点:
通信使用明文可能被窃听:
加密可以防止窃听,http通过和SSL或TLS的组合使用,加密HTTP的通信内容。
不验证通信方的身份可能遭遇伪装:
查明对手的证书:
SSL不仅提供了加密手段,还使用了证书,证书有值得信赖的第三方机构颁发,用以证明服务端和客户端是实际存在的。伪造证书技术困难,所以只要确认通信方(服务端或者客户端)有证书,可判断通信方的真实意图。
无法验证报文的完整性,可能被篡改:
典型的攻击方式中间人攻击(MITM)
7.2 HTTP+加密+认证+完整性保护=HTTPS
HTTPS是身披SSL外壳的HTTP
HTTPS非全新的协议,是HTTP通信接口部分用SSL和TLS协议替代而已。通常HTTP直接和TCP通信,当使用SSL时,则变成先跟SSL通信,再由SSL和TCP通信。
补充下背景知识:SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”,也是网景公司设计的。1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在1999年把 SSL 标准化。标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。常见都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。
相互交换**的公开加密技术
所谓加密,解密:“加密”的过程,就是把“明文”变成“密文”的过程;反之,“解密”的过程,就是把“密文”变为“明文”。在这两个过程中,都需要“**”来参与数学运算。
对称加密:加密”和“解密”使用【相同的】**
优点:速度快
缺点:存在传输**的问题。
非对称加密:简单理解就是公开**,私有**。
优点:因为解密就是对离散对数求值,非常复杂,所以安全性很高。
缺点:处理速度慢。
HTTPS采用混合加密的方式:
在交换**环节采取非对称加密方式,之后的建立通信交换报文采用对称加密方式。
证明公开**正确性的证书
CA是Certificate Authority的缩写,也叫“证书授权中心”。证书”洋文也叫“digital certificate”。
证书有信任链。
这里图比较清晰的介绍了验证关系。
客户端认证证书
证书的获取及发布。证书是收费的,仅用于特殊用途。
自签名证书:
无法消除伪装的可能性,不排除和正在伪装的假服务器保持通信。
值得信赖的三方机构介入,才能让以植入浏览器的认证机构颁布的公开**发挥作用,并借此认证服务器的真实性。
HTTPS安全通信机制:
1.客户端通过发送报文hello给服务器开始SSL通信,报文包含客户端支持的一套加密规则(SSL指定版本,加密组件)发送给网站。
2服务器可进行SSL通信时,会响应报文server hello
,报文中包含SSL版本及加密组件(加密组件是从接收到客户端加密组件内筛选出来的)。之后服务端将自己的身份信息以证书的形式发回给客户端。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3 最后服务端发送server hello done通知客户端,最初阶段的SSL握手协商阶段结束。
SSL第一次握手结束
4.获得服务端证书之后客户端要做以下工作:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书受信任,或者是用户接受了不受信的证书,客户端会生成一串随机数的密码(pre-master
secret),并用证书中提供的公钥加密,以报文client-key-exchange。
c) 客户端继续发送change cipher Spec报文,用来告诉服务端,此报文之后的通信会采用pre-master
secret进行加密。
d)客户端发送finish报文,报文包含链接至今全部报文的整体校验值。这次握手协商是否能够成功,一服务器是否能够正确解密该报文作为判断标准。
5.服务端接收客户端发来的数据之后要做以下的操作:
a) 使用自己的私钥将信息解密取出密码,使用密码解密客户端发来的握手消息,并验证HASH是否与客户端发来的一致。
b) Certificate Verify:如果服务器请求验证客户端,则这消息允许服务器完成验证过程。
6 服务端发送Change cipher spec报文:
服务器要求客户端在后续的通信中使用加密模式。
7 服务端发送finish报文。
服务器告诉客户端它已经准备好安全通信了。SSL握手完成的标志。
之后所有的通信数据将由之前客户端生成的随机密码并利用对称加密算法进行加密。
也就是开始应用层通信,即发送HTTP请求。
这里客户端与服务器互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。在上述流程中,应用层发送数据时会附加一个叫做MAC的报文摘要,MAC能够检查报文是否遭到篡改,从而保证报文的完整性。
其中非对称加密算法用于在握手过程中加密生成的密码,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性。由于客户端生成的密码是整个数据加密的关键,因此在传输的时候使用了非对称加密算法对其加密。非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输,而服务器的私钥用于对数据进行解密,所以服务器都会非常小心的保管自己的私钥,防止泄漏。
TLS握手过程中如果有任何错误,都会使加密连接断开,从而阻止了隐私信息的传输。
整理完这里,对于HTTPS的理论算是有个理解,还需要深入结合代码去看。