SSL和TLS协议如何提供身份验证、机密性和完整性
SSL 和 TLS 协议使两方能够相互识别和验证,并以机密性和数据完整性进行通信。SSL 和 TLS 协议通过 Internet 提供通信安全性,并允许客户端/服务器应用程序以保密和可靠的方式进行通信。这些协议有两层:记录协议和握手协议,它们位于 TCP/IP 等传输协议之上。它们都使用非对称和对称加密技术。
SSL 或 TLS 连接由成为 SSL 或 TLS 客户端的应用程序启动。接收连接的应用程序成为 SSL 或 TLS 服务器。正如 SSL 或 TLS 协议所定义的,每个新会话都以握手开始。SSL 或 TLS 握手使 SSL 或 TLS 客户端和服务器能够建立与之通信的密钥。
在客户端和服务器身份验证期间,有一个步骤要求使用非对称密钥对中的一个密钥对数据进行加密,并使用该对中的另一个密钥对其进行解密,消息摘要用于提供完整性。详情请参阅SSL工作原理
SSL 和 TLS 如何提供身份验证
对于服务器身份验证,客户端使用服务器的公钥来加密用于计算密钥的数据。只有当服务器可以使用正确的私钥解密该数据时,它才能生成密钥。
对于客户端身份验证,服务器使用客户端证书中的公钥解密客户端在第5步握手期间发送的数据。使用密钥加密的已完成消息的交换(概述中的步骤7和8 )确认身份验证已完成。
如果任何身份验证步骤失败,则握手失败并且会话终止。
SSL 或 TLS 握手期间的SSL证书交换是身份验证过程的一部分。SSL证书需由全球信任的CA机构颁发,受浏览器、操作系统和移动端信任。所需证书如下,其中CAx向客户端颁发证书,CAy向SSL 或 TLS 服务器颁发证书:
仅对于服务器身份验证,SSL 或 TLS 服务器需要:
- CA颁发给服务器证书Y
- 服务器的私钥
SSL 或 TLS 客户端需要:
- CA 的 CA 证书Y
如果 SSL 或 TLS 服务器需要客户端身份验证,则服务器通过使用向客户端颁发个人证书的 CA(在本例中为 CA )的公钥验证客户端的数字证书来验证客户端的身份X。对于服务器和客户端身份验证,服务器需要:
- CA颁发给服务器的个人证书Y
- 服务器的私钥
- CA 的 CA 证书X
和客户端需要:
- CA颁发给客户的个人证书X
- 客户的私钥
- CA 的 CA 证书Y
SSL 或 TLS 服务器和客户端都可能需要其他 CA 证书来形成根 CA 证书的证书链。详情请参阅如何补全SSL证书链
证书验证期间会发生什么
如概述的第3步和第 6步所述,SSL 或 TLS 客户端验证服务器的证书,而 SSL 或 TLS 服务器验证客户端的证书。这个验证有四个方面:
- 检查数字签名
- 检查证书链;您应该拥有中间 CA 证书
- 检查到期和激活日期以及有效期
- 检查证书的吊销状态
密钥重置
在 SSL 或 TLS 握手期间,会生成一个密钥来加密 SSL 或 TLS 客户端和服务器之间的数据。密钥用于数学公式中,该公式应用于数据以将明文转换为不可读的密文,并将密文转换为明文。
密钥是从作为握手的一部分发送的随机文本生成的,用于将明文加密为密文。密钥还用于 MAC(消息验证码)算法,用于确定消息是否已被更改。
如果发现密钥,则可以从密文中破译消息的明文,或者可以计算消息摘要,从而允许在不被发现的情况下更改消息。即使对于复杂的算法,明文最终也可以通过对密文应用所有可能的数学变换来发现。如果密钥被破坏,为了最大限度地减少可以解密或更改的数据量,可以定期重新协商密钥。当密钥重新协商后,以前的密钥不能再用于解密用新密钥加密的数据。
SSL 和 TLS 如何提供机密性
SSL 和 TLS 结合使用对称和非对称加密来确保消息隐私。在 SSL 或 TLS 握手期间,SSL 或 TLS 客户端和服务器同意仅用于一个会话的加密算法和共享密钥。SSL 或 TLS 客户端和服务器之间传输的所有消息都使用该算法和密钥进行加密,确保消息即使被截获也保持私密。SSL 支持范围广泛的加密算法。因为 SSL 和 TLS 在传输共享密钥时使用非对称加密,所以不存在密钥分配问题。
SSL 和 TLS 如何提供完整性
SSL 和 TLS 通过计算消息摘要来提供数据完整性。使用 SSL 或 TLS 确实可以确保数据完整性,前提是您的通道定义中的 CipherSpec 使用指定 CipherSpecs中的表中描述的哈希算法。
特别是,如果数据完整性是一个问题,您应该避免选择散列算法被列为“无”的 CipherSpec。强烈建议不要使用 MD5,因为它现在已经很老了,对于大多数实际用途来说不再安全。