https原理

先上图

1、HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。

2、HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。

SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。

TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。

加密过程1

  1. 客户端向服务端发了个请求

  2. 服务器发送了一个SSL证书给客户端。 SSL 证书中包含的具体内容有:

    (1)证书的发布机构CA

    (2)证书的有效期

    (3)公钥

    (4)证书所有者

    (5)数字签名及签名算法

    ………

  3. 客户端在接受到服务端发来的SSL证书时,会对证书的真伪进行校验。以浏览器为例说明如下:

    (1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验

    (2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发

    (3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。

    (4)如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名hash-a进行解密得到a

    (5)浏览器使用服务器发来的证书里面的签名算法对a进行加密,得到hash-b

    (6)如果hash-a等于hash-b,则证明服务器发来的证书合法,没有被冒充

    (7)此时浏览器就可以读取证书中的公钥,用于后续加密了

  4. 浏览器生成随机数,用公钥加密,传给服务端

  5. 服务端用私钥解密,得到对称加密的秘钥C,用C对数据进行加密

  6. 客户端用C对数据进行解密

加密过程2

TLS协议是基于TCP协议之上的,图中第一个蓝色往返是TCP的握手过程,之后两次橙色的往返,我们可以叫做TLS的握手。握手过程如下:

  • client1:TLS版本号+所支持加密套件列表+希望使用的TLS选项

  • Server1:选择一个客户端的加密套件+自己的公钥+自己的证书+希望使用的TLS选项+(要求客户端证书);

  • Client2:(自己的证书)+使用服务器公钥和协商的加密套件加密一个对称秘钥(自己生成的一个随机值);

  • Server2:使用私钥解密出对称秘钥(随机值)后,发送加密的Finish消息,表明完成握手

总结

综上所述,相比 HTTP 协议,HTTPS 协议增加了很多握手、加密解密等流程,虽然过程很复杂,但其可以保证数据传输的安全。所以在这个互联网膨胀的时代,其中隐藏着各种看不见的危机,为了保证数据的安全,维护网络稳定,建议大家多多推广HTTPS。

HTTPS 缺点:

(1)SSL 证书费用很高,以及其在服务器上的部署、更新维护非常繁琐

(2)HTTPS 降低用户访问速度(多次握手)

(3)网站改用HTTPS 以后,由HTTP 跳转到 HTTPS 的方式增加了用户访问耗时(多数网站采用302跳转)

(4)HTTPS 涉及到的安全算法会消耗 CPU 资源,需要增加大量机器(https访问过程需要加解密)

视频参考 10min