HTTPS

HTTPS

HTTP在安全方面的不足

  • 通信使用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭篡改

这些问题不仅在 HTTP 上出现,其他未加密的协议中也会存在这类问题

窃听

由于 HTTP 本身不具备加密的功能,所以也无法做到对通信整体(使用 HTTP 协议通信的请求和响应的内容)进行加密。即,HTTP 报文使用明文(指未经过加密的报文)方式发送。

伪装

HTTP 协议中的请求和响应不会对通信方进行确认。也就是说存在“服务器是否就是发送请求中 URI 真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端”等类似问题。

篡改

由于 HTTP 协议无法证明通信的报文完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack,MITM)

HTTP+ 加密 + 认证 + 完整性保护 =HTTPS

通常,HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL 协议这层外壳的 HTTP。

SSL 是独立于 HTTP 的协议,所以不光是 HTTP 协议,其他运行在应用层的 SMTP 和 Telnet 等协议均可配合 SSL 协议使用。可以说 SSL 是当今世界上应用最为广泛的网络安全技术。

共享密钥(对称密钥) & 公开密钥(非对称密钥)

了解HTTPS必须要了解到一些常用的加密手段,以及其优势和劣势,因为HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制。

共享密钥

加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了。如果密钥被攻击者获得,那加密也就失去了意义。但是与公开密钥相比,其加密、揭秘性能高。

公开密钥

公开密钥加密使用一对非对称的密钥。一把叫做私有密钥(private key),另一把叫做公开密钥(public key)。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。

使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。

HTTPS 采用混合加密机制

看得出,服务器在提供给客户端public key时如果被第三发截获、掉包那么就有安全问题了,所有又有了第三发验证机构:数字证书认证机构(CA,Certificate Authority)

首先,服务器的运营人员向数字证书认证机构提出公开密钥的申请。数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。

服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行公开密钥加密方式通信。公钥证书也可叫做数字证书或直接称为证书。

HTTPS 的安全通信机制

一切都准备好了,下一步就是利用上面的知识点做一个可靠、安全的通行链路了,具体细节可以从这个流程图例获得

请注意第2步时,当服务器给客户端返回自己的证书时,证书包含三部分内容,公钥、名称、数字签名等信息;注意数字签名是加密的,数字签名是用颁发机构的私钥对本证书的公钥,名称以及其他信息做hash散列加密而成的,所以客户端需要解密数字签名来验证该证书是否是合法可靠的,那怎么解密呢,客户端浏览器会找到该证书的根证书颁发机构,然后在本机上的证书管理器里寻找 那些受信任的根证书颁发机构列表是否有该证书的根证书颁发机构,如果有,则用该根证书的公钥解密服务器下发的证书

  • 如果不能正常解密,则服务器下发的证书则被认为是伪造的,浏览器弹出提示框
  • 如果能正常解密,则获取到公钥,名称,数字签名信息跟本身的公钥等其他信息比对一下,确认公钥没有被篡改,如果公钥不一致,则依然被认为是不可信的

因此客户端验证服务器的合法性取决于公钥,而公钥的合法性取决于ca证书颁发机构的合法性,这里会形成一个信任链,而终点则是CA根证书,根证书是CA机构自己办法给自己的,根证书是一个特殊的数字证书,公钥是公开的,而私钥是被CA机构保存在硬件中的,所以证书的安全性取决于你对该CA机构的信任,反过来说,加入CA机构的密钥被窃取,那么该CA机构颁发的所有证书将会存在灾难性安全问题;

就像你验证身份证是否真实,肯定去公安局验证,那么谁来保证公安局是合法可靠的呢,没人能保证,公安局自己生命自己是合法可靠的,就这么简单

SSL/TLS

HTTPS 使用 SSL(Secure Socket Layer) 和 TLS(Transport Layer Security)这两个协议。

SSL 技术最初是由浏览器开发商网景通信公司率先倡导的,开发过 SSL3.0 之前的版本。目前主导权已转移到 IETF(Internet Engineering Task Force,Internet 工程任务组)的手中。

IETF 以 SSL3.0 为基准,后又制定了 TLS1.0、TLS1.1 和 “TLS1.2。TSL 是以 SSL 为原型开发的协议,有时会统一称该协议为 SSL。当前主流的版本是 SSL3.0 和 TLS1.0。

由于 SSL1.0 协议在设计之初被发现出了问题,就没有实际投入使用。SSL2.0 也被发现存在问题,所以很多浏览器直接废除了该协议版本。

HTTPS or Not

虽然HTTPS在安全上做到了保障,但是一份付出一分收获。

速度

SSL 的慢分两种。一种是指通信慢。另一种是指由于大量消耗 CPU 及内存等资源,导致处理速度变慢。

和使用 HTTP 相比,网络负载可能会变慢 2 到 100 倍。除去和 TCP 连接、发送 HTTP 请求 • 响应以外,还必须进行 SSL 通信,因此整体上处理通信量不可避免会增加。

价格

要进行 HTTPS 通信,证书是必不可少的。而使用的证书必须向认证机构(CA)购买。证书价格可能会根据不同的认证机构略有不同。通常,一年的授权需要600人民币。

HTTPS真的可靠吗?

没有绝对的安全

  • 一个合法有效的SSL证书误签发给了假冒者
  • 破解SSL证书签发CA的私钥
  • SSL证书签发CA的私钥泄露
  • 破解SSL证书的私钥
  • SSL证书的私钥泄露
  • 伪造一个合法有效的SSL证书
  • 认证机构主动为假冒网站签发合法有效的服务器证书
  • 利用可信的SSL服务器证书进行中间人攻击
  • 在用户主机中植入伪造的根CA证书(或一个完整的CA证书链)
  • 旁路证书可信性的验证



The link of this page is https://blog.nooa.tech/articles/87267df0/ . Welcome to reproduce it!

© 2018.02.08 - 2024.05.25 Mengmeng Kuang  保留所有权利!

:D 获取中...

Creative Commons License