Loading...

TLS

标签:

Transport Layer Security - Wikipedia

SSL/TLS 是一种密码通信框架,他是世界上使用最广泛的密码通信方法。SSL/TLS 综合运用了密码学中的对称密码,消息认证码,公钥密码,数字签名,伪随机数生成器等,可以说是密码学中的集大成者。

  • SSL(Secure Socket Layer)安全套接层,是 1994 年由 Netscape 公司设计的一套协议,并与 1995 年发布了 3.0 版本。
  • TLS(Transport Layer Security)传输层安全是 IETF 在 SSL3.0 基础上设计的协议,实际上相当于 SSL 的后续版本。

传输层安全性(Transport Layer Security,TLS)是一种广泛采用的安全性协议,旨在促进互联网通信的私密性和数据安全性。TLS 的主要用例是对 web 应用程序和服务器之间的通信(例如,web 浏览器加载网站)进行加密。TLS 还可以用于加密其他通信,如电子邮件、消息传递和 IP 语音 (VoIP) 等。

TLS 和 HTTPS 有什么区别?

HTTPS 是在 HTTP 协议基础上实施 TLS 加密,所有网站以及其他部分 web 服务都使用该协议。因此,任何使用 HTTPS 的网站都使用 TLS 加密。

TLS 有什么作用?

TLS 协议实现的功能有三个主要组成部分:加密、认证和完整性。

  • 加密:隐藏从第三方传输的数据。
  • 身份验证:确保交换信息的各方是他们所声称的身份。
  • 完整性:验证数据未被伪造或篡改。

什么是 TLS 证书?

网站或应用程序要使用 TLS,必须在其源服务器上安装 TLS 证书(由于上述命名混淆,该证书也被称为 SSL 证书)。TLS 证书由证书权威机构颁发给拥有域的个人或企业。该证书包含有关域所有者的重要信息以及服务器的公钥,两者对验证服务器身份都很重要。

SSL/TLS 的应用

SSL/TLS 是一个安全通信框架,上面可以承载 HTTP 协议或者 SMTP/POP3 协议等。

TLS 协议的架构

TLS 主要分为两层,底层的是 TLS 记录协议,主要负责使用对称密码对消息进行加密。

上层的是 TLS 握手协议,主要分为握手协议,密码规格变更协议和应用数据协议 4 个部分。

  • 握手协议负责在客户端和服务器端商定密码算法和共享密钥,包括证书认证,是 4 个协议中最最复杂的部分。
  • 密码规格变更协议负责向通信对象传达变更密码方式的信号
  • 警告协议负责在发生错误的时候将错误传达给对方
  • 应用数据协议负责将 TLS 承载的应用数据传达给通信对象的协议。

握手协议

握手协议是 TLS 协议中非常重要的协议,通过客户端和服务器端的交互,和共享一些必要信息,从而生成共享密钥和交互证书。

  1. client hello 客户端向服务器端发送一个 client hello 的消息,包含下面内容:
    • 可用版本号
    • 当前时间
    • 客户端随机数
    • 会话 ID
    • 可用的密码套件清单
    • 可用的压缩方式清单

我们之前提到了 TLS 其实是一套加密框架,其中的有些组件其实是可以替换的,这里可用版本号,可用的密码套件清单,可用的压缩方式清单就是向服务器询问对方支持哪些服务。客户端随机数是一个由客户端生成的随机数,用来生成对称密钥。

  1. server hello 服务器端收到 client hello 消息后,会向客户端返回一个 server hello 消息,包含如下内容:
    • 使用的版本号
    • 当前时间
    • 服务器随机数
    • 会话 ID
    • 使用的密码套件
    • 使用的压缩方式

使用的版本号,使用的密码套件,使用的压缩方式是对步骤 1 的回答。

服务器随机数是一个由服务器端生成的随机数,用来生成对称密钥。

  1. 可选步骤:certificate 服务器端发送自己的证书清单,因为证书可能是层级结构的,所以处理服务器自己的证书之外,还需要发送为服务器签名的证书。 客户端将会对服务器端的证书进行验证。如果是以匿名的方式通信则不需要证书。
  2. 可选步骤:ServerKeyExchange 如果第三步的证书信息不足,则可以发送 ServerKeyExchange 用来构建加密通道。 ServerKeyExchange 的内容可能包含两种形式:
    • 如果选择的是 RSA 协议,那么传递的就是 RSA 构建公钥密码的参数,那么就知道了 RSA 的公钥。
    • 如果选择的是 Diff-Hellman 密钥交换协议,那么传递的就是密钥交换的参数,具体内容可以参考更加安全的密钥生成方法 Diffie-Hellman
  3. 可选步骤:CertificateRequest 如果是在一个受限访问的环境,比如 fabric 中,服务器端也需要向客户端索要证书。 如果并不需要客户端认证,则不需要此步骤。
  4. server hello done 服务器端发送 server hello done 的消息告诉客户端自己的消息结束了。
  5. 可选步骤:Certificate 对步骤 5 的回应,客户端发送客户端证书给服务器
  6. ClientKeyExchange 还是分两种情况:
    • 如果是公钥或者 RSA 模式情况下,客户端将根据客户端生成的随机数和服务器端生成的随机数,生成预备主密码,通过该公钥进行加密,返送给服务器端。
    • 如果使用的是 Diff-Hellman 密钥交换协议,则客户端会发送自己这一方要生成 Diff-Hellman 密钥而需要公开的值。具体内容可以参考更加安全的密钥生成方法 Diffie-Hellman,这样服务器端可以根据这个公开值计算出预备主密码。
  7. 可选步骤:CertificateVerify 客户端向服务器端证明自己是客户端证书的持有者。
  8. ChangeCipherSpec(准备切换密码) ChangeCipherSpec 是密码规格变更协议的消息,表示后面的消息将会以前面协商过的密钥进行加密。
  9. finished(握手协议结束) 客户端告诉服务器端握手协议结束了。
  10. ChangeCipherSpec(准备切换密码) 服务器端告诉客户端自己要切换密码了。
  11. finished(握手协议结束) 服务器端告诉客户端,握手协议结束了。
  12. 切换到应用数据协议 这之后服务器和客户端就是以加密的方式进行沟通了。