Google的一份网络上的 HTTPS 加密[1]透明报告(数据截至2022年1月)中指出HTTPS 连接的普及率在过去几年激增,互联网上排名前 100 位的非 Google 网站HTTPS 使用情况为:97%的站点默认启用HTTPS,100%的站点支持HTTPS。
Chrome 中的 HTTPS 浏览时间所占的百分比(按平台)
Chrome 中通过 HTTPS 加载的网页所占的百分比(按国家/地区)
如此流行的HTTPS我们应当对其有所了解,通过阅读本文你可能能更进一步了解HTTPS相关的安全实现。
HTTPS(超文本传输安全协议)使用HTTP进行通信,但利用SSL/TLS来加密数据包,所以它也有另外一种称呼HTTP over TLS/SSL,说HTTPS安全其实说的就是TLS/SSL协议。HTTP以明文的方式在网络中交换数据,攻击者可以轻易通过监听或中间人攻击等手段,获取网站帐户和敏感信息等,而HTTPS可以做到如下几个特性:
我们说http是明文传输,所以https首要解决的问题就是它的通信加密,达到保密性。
对称加密是最简单、最常见的加密方式。
通信双方持有相同的密钥key,加密和解密都是使用同一个密钥。当客户端要发送数据时先用key对数据进行加密生成secret data,接着传输到服务端。服务端接收数据时,通过key将数据解密为data。反之客户端接收数据也是如此。
这样即使数据被截获,由于不知道key数据也无法被解密。常见的对称加密算法有 DES、 AES 等。对称加密速度快、效率高,能够使用较小的计算量完成加密。
对称加密有一个核心问题是如何在互联网上传输密钥?它不能像现实中一样我打个车就过去你家把密钥塞给你,万一密钥被截胡了不就白搭了。所以需要非对称加密来解决这个问题。
非对称加密就是加密和解密使用两个不同的密钥,密钥对包含一个公钥(public key)和一个私钥(private key)。其中公钥只能用于加密,私钥只用于解密。
首先客户端请求服务端,服务端将自己的公钥返回,客户端拿到公钥后就可以用它来加密要传输的数据data ,将加密数据secret data发送到服务端后通过服务端的私钥来解密,以此完成加密传输。
有了非对称加密,只要我们将其中的data换成随机码key,这个key作为对称加密中密钥。密钥传输问题就解决了,同时很好地利用了对称加密的高效率。
如下所示:
这样HTTPS中通信的数据加密已经完成了。
一个http请求:
一个加密的https请求:
只要我们的私钥不被破解,即使通信被监听也得不到其中的敏感加密数据。
上面我们忽略了一个重要的问题,在通信中如何保证所连接的服务端真实性呢?如下图我们的通信已经被中间人截胡了,client此时通信对象为hacker。
在HTTPS中是如何防止这种中间人攻击的呢?让我们请出数字证书!
所谓证书就是第三方(自签证书没有公证效应)颁发的认证,比如我们的学位证是由教育局颁发的一种学历认证,由教育局来认证此人获得了某个学位。同样在HTTPS中存在一种认证机构即CA(Certification Authority),由它来证明你所连接的服务端就是你想要连接的server,即保证服务端真实性。
要获取学位证你需要花钱上学、学习,而获取数字证书你只需要花钱。
如下图所示(图源:what-is-a-certificate-authority[2]):
ok,申请到了数字证书,给安装到server中。
如下图所示:
对 HTTPS 连接的攻击通常分为 3 类:
以上是对HTTPS安全及其实现原理的学习,其中没有提到TLS/SSL版本、加密算法相关的内容,有兴趣的可以自行检索。