programnotes

V1

2022/12/21阅读:69主题:默认主题

tls连接是如何建立的

建立ssl/tls连接需要若干步骤,协议结合使用了对称加密和非对称加密,客户机和服务端需要协商所使用的算法并交换密钥信息. 下面以TLS 1.2为例介绍下流程(TlS1.3做了很多优化)

流程

tls handshake
tls handshake

说明

1.Client Hello

客户端发送的'Client Hello'包括以下信息:

  1. Client Version 客户端发送一组支持的TSL/SSL协议版本(首选版本放在最前面,通常是最新可用的版本)
  2. Client Random 32 byte的随机数,client random和server random被用于生成用于加密的密钥. 在最初的 TLS 1.2规范中,前4个字节表示客户机的当前日期和时间(以纪元格式,即时间戳,'2022-09-27 10:32:51'的毫秒级时间戳:1664245971662),剩下的28个字节应该是随机生成的数字。 然而,IETF后来建议不要这样做
  3. Session ID 用于连接的会话ID,如果session_id 不是空的,服务器将搜索以前缓存的会话,并在找到匹配的会话时恢复该会话
  4. Compression_Method 用于压缩SSL的数据包,可提升传输速度,但有风险(https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
  5. Cipher Suites Cipher Suites是密码算法的组合.通常,每个密码套件包含一个用于以下任务的加密算法
    • 密钥交换(key exchange)
    • 身份验证(authentication)
    • 批量(数据)加密(bulk data encryption)
    • 消息身份验证(message authentication) 客户端按照偏好顺序发送它所支持的所有密码套件的列表,理想情况下,client希望使用发送的第一个cipher suite建立连接 样例(TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
    • TLS is the protocol being used
    • ECDHE is the key exchange algorithm (Elliptic curve Diffie–Hellman)
    • ECDSA is the authentication algorithm (Elliptic Curve Digital Signature Algorithm)
    • AES_128_GCM is the data encryption algorithm (Advanced Encryption Standard 128 bit Galois/Counter Mode)
    • SHA256 is the Message Authentication Code (MAC) algorithm (Secure Hash Algorithm 256 bit)
  6. Extensions 附加功能,可以通过扩展来实现,比如支持(elliptic curve cryptography, point formats for elliptic curve cryptography, signature algorithms...) 如果服务器不能提供附加功能,客户端可能会中止握手

example

client hello
client hello

2.Server Hello

服务端收到'Client Hello'会回复'Server Hello', 可能包含选定的选项(来自'Client Hello'建议的选项),也可能是握手失败消息,包含:

  1. Server Version 从客户端提供的版本中选择 SSL/TLS 协议的首选版本(preferred version)
  2. Server Random 和客户端发送的类似,32 byte的随机数
  3. Session ID 如果客户端Session ID不是空的,服务器将搜索以前缓存的会话,如果找到匹配,则使用该会话ID恢复会话 如果客户端会话ID为空,则服务器可以创建一个新会话并将其发送出去
  4. Cipher Suites
  5. CompressionMethods
  6. Server Certificate(Sever->Client) server向client发送经过签名的 TLS/SSL 证书,以证明其身份,还包含sever的公钥。
  7. Client Certificate(Client->Server,Optional) 在极少数情况下,server可能要求client使用client证书进行身份验证。如果是,client将向server提供其已签名的证书
  8. Server Key Exchange(Sever->Client) 只有在server提供的证书不足以让client交换pre-master secret时,才会发送服务器密钥交换消息。 (如:DHE_DSS,DHE_RSA,DH_anon 是这样的)。
  9. Server Hello Done(Server->Client) sever将此消息发送到client以确认Server Hello消息已完成

example

 ![server hello](https://files.mdnice.com/user/39075/6c4fc697-786c-4617-af28-dc89d8b26b62.png)

3.Client Key Exchange

在接收到'Server Hello Done'后开始.

  1. Pre-Master Secret client使用接收自server的非对称密钥(asymmetric encryption)加密'pre-master secret',这样只要server才能解密得到'pre-master secret'

    pre-master secret
    pre-master secret
  2. Master Secret server接收到'pre-master secret'后会使用私钥解密数据,client和server使用伪随机函数(PRF)根据前面交换的随机值(Client Random 和 Server Random)计算'master secret' PRF 是一个用来产生任意数量的伪随机数据的函数 'master secret'占48 byte,是对称加密秘钥,随后,client和server都将使用对称加密的数据进行其余的通信(使用'master secret'生成一组秘钥用于加密/解密数据) - client_write_MAC_key: Authentication and Integrity check - server_write_MAC_key: Authentication and Integrity check - client_write_key: Message encryption using symmetric key - server_write_key: Message encryption using symmetric key - client_write_IV: Initialization Vector used by some AHEAD ciphers - server_write_IV: Initialization Vector used by some AHEAD ciphers

  3. Client Change Cipher Spec 此时client已经准备好切换到一个安全的、加密的环境。'Change Cipher Spec'协议用于更改加密算法 从现在起,client发送的任何数据都将使用对称共享密钥进行加密。

    Change Cipher Spec
    Change Cipher Spec
  4. Client Handshake Finished 来自client的握手过程的最后一条消息表示握手已经完成。这也是安全连接的第一条加密消息。

4.Server Finished

  1. Server Change Cipher Spec server准备好切换到加密的环境。 从现在起,服务器发送的任何数据都将使用对称共享密钥进行加密。
  2. Server Handshake Finished 来自server的握手过程的最后一条消息,表示握手结束。

TLS1.3的握手

在TLS 1.2及更早版本中,TLS握手需要完成两个round trips

  • 第一次round trip是交换问候(hellos)
  • 第二次round trip是密钥交换(key exchange)和changing the cipher spec(加密方式,加密算法)

在TLS 1.3中,这个过程是流线型的,只需要一次round trip。 TLS 1.3也不再支持 TLS 压缩。

tls 1.3
tls 1.3

在 TLS 1.3中,当server发送 hello 时会猜测server最可能选择的密钥协商协议。同时,它使用猜测协议共享密钥。 server的 hello 消息还包含共享密钥(shared key)、证书和服务器完成的消息。 不需要cipher change,因为在交换信息之后,双方都已经拥有了加密通信所需要的一切。

Cipher Suites

Cipher suites are sets of encryption algorithms(加密算法)

A cipher suite always includes four different algorithms for four purposes: the key exchange algorithm, the authentication algorithm, the data encryption algorithm, and the Message Authentication Code (MAC) algorithm.

验证

  1. 使用curl -v观察支持https的站点

    # http/1.1的站点,如百度
    curl  https://baidu.com -v
    # 输出如下:
    # * Rebuilt URL to: https://baidu.com/
    # * Trying 39.156.66.10...
    # * TCP_NODELAY set
    # * Connected to baidu.com (39.156.66.10) port 443 (#0)
    # * ALPN, offering h2
    # * ALPN, offering http/1.1
    # * successfully set certificate verify locations:
    # * CAfile: /etc/ssl/certs/ca-certificates.crt
    #   CApath: /etc/ssl/certs
    # * TLSv1.3 (OUT), TLS handshake, Client hello (1):
    # * TLSv1.3 (IN), TLS handshake, Server hello (2):
    # * TLSv1.2 (IN), TLS handshake, Certificate (11):
    # * TLSv1.2 (IN), TLS handshake, Server key exchange (12):
    # * TLSv1.2 (IN), TLS handshake, Server finished (14):
    # * TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
    # * TLSv1.2 (OUT), TLS change cipher, Client hello (1):
    # * TLSv1.2 (OUT), TLS handshake, Finished (20):
    # * TLSv1.2 (IN), TLS handshake, Finished (20):
    # * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
    # * ALPN, server accepted to use http/1.1
  2. inet netmask broadcast

参考

分类:

后端

标签:

后端

作者介绍

programnotes
V1