HTTPS 如何实现加密

· 1044 words · 6 min

HTTPS 即 HTTP(Hyper Text Transfer Protocol)+ SSL/TLS。SSL(Secure Sockets Layer)提高了互联网的连接安全,对两个系统之间发送的敏感数据提供了有效保护, 它使用加密算法对传输的数据进行加密,防止第三方进行劫持和篡改。这两个系统可以是服务端与客户端,也可以是服务端与服务端。 TLS(Transport Layer Security)只是更新的、更安全的 SSL 版本,我们仍可以将我们的安全证书称为 SSL,因为它是一个更常用的术语。 SSL 证书安装在服务器端,但是在浏览器上有可视警告。如果该网站安装了 SSL 证书,浏览器的地址栏将显示 https:// 而不是 http://,根据证书颁发给企业的验证级别,地址栏前面通常会挂有绿锁来指示安全连接。

对称加密与非对称加密

加密分为对称加密非对称加密(RSA)。对称加密使用同一个密钥进行加密与解密,而非对称加密使用公钥或私钥进行加密与解密。 对称加密时,加密的内容可以使用对称密钥解开。而非对称加密时,公钥加密的内容只有私钥能解开,反之私钥加密的内容只有公钥能解开。

SSL/TLS 实现加密过程

如果服务端与客户端使用对称加密进行数据的传输,那么在服务端对单个客户端时没有问题,但是当服务端对多个客户端时,若第三方劫持到了通信数据并破解得到了密钥,那么也就意味着同时破解了其他客户端发送给服务端的数据,这样是极其不安全的。 如若将对称加密与非对称加密结合起来,取长补短,就能够有效的解决上述问题。通常采取以下做法:

  1. 服务端会保留私钥,公钥会发送给客户端。
  2. 客户端接收到公钥后,在本地生成一对对称密钥。
  3. 客户端通过公钥将生成的对称密钥进行加密,再发送给服务端。
  4. 服务端使用私钥解密客户端通过公钥加密后的内容,得到对称密钥。
  5. 之后服务端与客户端使用该对称密钥进行数据的传输。

就算第三方劫持到客户端发送给服务端发送的数据(通过公钥加密的对称密钥)后,也无法进行破解(需要私钥才能破解)。

公钥如何保证安全

如何保证服务端发送给客户端的公钥确实是未经第三方劫持篡改的公钥呢?答案是使用数字证书。服务端提供网站信息(包含公钥)去认证机构进行认证,认证机构根据提供的网站信息经加密(MD5)生成数字签名, 利用网站信息+数字签名组成数字证书(该数字证书经认证机构的私钥加密)后,将该数字证书颁发给服务端。那么服务端在向客户端通信时,将不再直接发送公钥,而是发送数字证书(包含公钥),向客户端证明自己的身份。

  1. 客户端本地具有认证机构的公钥(浏览器内置)。
  2. 客户端接收到服务端发送过来的数字证书后,使用认证机构的公钥进行解密,得到其中的网站信息与数字签名。
  3. 客户端对网站信息进行 MD5 计算得出本地的数字签名(其实就是 MD5 值),再与数字证书中的数字签名进行比对。
  4. 若两者的 MD5 值相同,说明该网站信息是未经劫持与篡改的,其中的公钥是可信的。

总结

就这样,使用对称加密+非对称加密+数字证书三者结合的方式,保证了服务端与客户端之间数据传输的准确性,敏感私有数据得到了有效的保护。

HTTPS