TLS
(Transport Layer Security
传输层安全协议)和 SSL
(Secure Sockets Layer
安全套接层)都是用于加密和保护网络通信的协议。
它们的主要目的是确保在计算机之间传输的数据在传输过程中保持机密性和完整性,以防止未经授权的访问和数据篡改。
SSL
是 TLS
的前身,最早由网景公司(Netscape
)于 1994
年开发,用于安全地传输数据。
SSL
的不同版本(如 SSL 2.0
和 SSL 3.0
)存在一些安全漏洞,因此被 TLS
所取代。
TLS
于 1999
年首次发布,是 SSL 3.0
的改进版本。
TLS
的设计目标是修复 SSL
的安全漏洞并提供更强大的加密和认证方法。TLS 1.0
也被称为 SSL 3.1
。
1.对称加密
Symmetric encryption
2.非对称加密
Asymmetric encryption
3.HTTPS加密
总的来说,如果我们将一次通信过程的双方,划分为 Client
客户端和 Server
服务端,那么在 HTTPS
通信流程中涉及到两点:
- 身份验证,即保证每次通信的双方都是可信的。
- 信息安全,即保证每次通信的信息没有被篡改。
下面,我们将通信过程,划分为请求阶段和响应阶段两个阶段,简单梳理下各个阶段是如何实现上述两点的。
3-1.请求阶段
在请求阶段中,采用非对称加密:
- 客户端生成一段随机字节,即预主密钥(
premaster secret
); - 客户端利用公钥将预主密钥进行信息加密;
- 客户端将加密的预主密钥发送到服务端;
- 服务端利用私钥将加密的预主密钥进行信息解密,得到预主密钥;
- 客户端和服务端会利用预主密钥,根据协商算法生成主密钥;
- 最终,客户端和服务端利用主密钥,生成会话密钥,在每一次通信中进行对称加密使用。
该阶段的信息流是 Client => Server
。那么 Server
要确定 Client
的身份和信息。
该阶段安全性校验的实现方式如下:
- 身份验证:最终通信会话,是依赖会话密钥的,也就是每一次会话都能确保是建立连接的双方。
- 信息安全:非对称加密的公钥加密信息只能由对应的私钥来解密。
RSA
算法很难破解。
3-2.响应阶段
在响应阶段中,采用数字签名:
- 服务端先利用
Hash
算法对信息进行转码,生成不可逆的散列值; - 然后利用私钥将散列值进行加密,加密结果即是数字签名;
- 服务端将数字签名和完整的响应信息,传递给客户端;
- 客户端接收到数字签名后,先利用公钥进行解密,得到散列值
A
; - 然后客户端将响应信息利用相同的
Hash
算法进行转码,得到散列值B
; - 如果散列值
A
和B
相同,则证明信息没有被篡改。反之,则已被篡改。
该阶段的信息流是 Server => Client
。那么 Client
要确定 Server
的身份和信息。
该阶段安全性校验的实现方式如下:
- 身份验证:私钥加密的信息,只能通过对应公钥来解密;
- 信息安全:利用了数字签名的机制,会进行散列值比对,以确定信息是否被篡改。
3-3.数字证书
上述两节梳理的两个阶段,都是在已经确立了公钥和私钥双方的情况下进行的。
但在实际业务中,要考虑怎么样交付公钥,也就是最初始步骤。
如何保证私钥服务器上的公钥能够正常交付给客户端,而且客户端能够确信这个公钥是目标服务端产生的?
这部分需要依赖 CA
(Certificate Authority
)即证书颁发机构。
证书颁发机构是一种第三方实体或组织,负责颁发数字证书,以验证公共密钥的真实性和用户身份。
数字证书是一种用于加密通信和验证数据完整性的安全工具,通常用于 HTTPS
连接、电子邮件加密、数字签名等场景。
数字证书的原理是这样的:
- 服务端需要向证书颁发机构申请数字证书;
- 证书颁发机构会生成密钥对,即公钥和私钥。这里的公钥一般被称作公共密钥;
- 证书颁发机构会根据私钥和证书相关信息,加密生成数字签名;
- 证书颁发机构会根据公共密钥、数字签名、持有人信息、证书有效期以及证书序列号生成数字证书;
- 客户端在访问服务端时,会获取数字证书;
- 如果证书已经过期的话,客户端便会提示不可信等等;
- 如果证书有效,那么就可以利用公共密钥对数字签名进行解密,然后比对证书信息;
- 结果一致的话,那就证明公钥是可信的。
其实总的来说:
- 初始的公钥交付以及验证功能,依赖于可信的第三方证书颁发机构。
- 证书验证功能,同样是数字签名的逻辑。