SSL/TLS 握手过程

SSL/TLS 握手过程是客户端和服务器之间建立安全连接的过程

主要包括以下步骤

  1. 客户端Hello (Client Hello)

    • 客户端发送支持的SSL/TLS版本、加密套件(cipher suites)、压缩方法和一个随机数(client random)给服务器。
  2. 服务器Hello (Server Hello)

    • 服务器从客户端支持的加密套件中选择一个加密套件,并返回给客户端,同时发送服务器的随机数(server random)。
  3. 服务器证书 (Server Certificate)

    • 服务器发送包含其公钥的数字证书给客户端。客户端使用这个证书来验证服务器的身份。
  4. 服务器Hello完成 (Server Hello Done)

    • 服务器向客户端发送一个消息,表示服务器端的Hello消息已完成。
  5. 客户端密钥交换 (Client Key Exchange)

    • 客户端生成一个预主密钥(pre-master secret),并使用服务器的公钥对其进行加密,然后发送给服务器。服务器使用其私钥解密预主密钥。
  6. 生成对称密钥 (Generate Symmetric Keys)

    • 客户端和服务器根据预主密钥、客户端随机数和服务器随机数生成对称密钥,用于后续的数据加密传输。
  7. 客户端完成 (Client Finished)

    • 客户端发送一个加密的"完成"消息,表示握手过程已完成。这条消息使用生成的对称密钥进行加密。
  8. 服务器完成 (Server Finished)

    • 服务器也发送一个加密的"完成"消息,表示握手过程已完成。这条消息同样使用生成的对称密钥进行加密。

SSL/TLS 握手过程的流程图

以下是SSL/TLS握手过程的详细流程图:

plaintext 复制代码
+-----------------------------------------------+
|                    客户端                     |
+-----------------------------------------------+
            |                                  
            | Client Hello                     
            | (支持的版本,加密套件,随机数)      
            v                                  
+-----------------------------------------------+
|                   服务器                      |
+-----------------------------------------------+
            ^                                  
            | Server Hello                     
            | (选择的版本,加密套件,随机数)    
            |                                  
            | Server Certificate                
            | (服务器公钥证书)                   
            |                                  
            | Server Hello Done                
            v                                  
+-----------------------------------------------+
|                    客户端                     |
+-----------------------------------------------+
            ^                                  
            | Client Key Exchange               
            | (用服务器公钥加密的预主密钥)       
            |                                  
            | [生成对称密钥]                    
            | Client Finished                   
            | (用对称密钥加密的完成消息)        
            v                                  
+-----------------------------------------------+
|                   服务器                      |
+-----------------------------------------------+
            ^                                  
            | [解密预主密钥并生成对称密钥]      
            | Server Finished                   
            | (用对称密钥加密的完成消息)        
            v                                  
+-----------------------------------------------+
|                    客户端                     |
+-----------------------------------------------+

[对称加密的数据传输开始]

在这个流程图中,握手过程的各个步骤依次进行,最终在客户端和服务器之间建立一个安全的加密通道,用于后续的数据传输。

对数字证书要有基本的理解

数字证书是一个电子文档,用于证明实体(如服务器、个人或组织)的身份。在SSL/TLS握手过程中,服务器使用数字证书来向客户端证明其身份,并提供其公钥,以便客户端加密敏感信息。

数字证书的内容

  1. 主体信息(Subject Information)

    • 包括持有证书的实体的信息,如组织名称、部门名称、国家、电子邮件地址等。
  2. 公钥(Public Key)

    • 证书持有者的公钥,用于加密数据或验证签名。在SSL/TLS握手过程中,客户端使用这个公钥加密预主密钥(pre-master secret)。
  3. 签发者信息(Issuer Information)

    • 签发证书的证书颁发机构(CA)的信息。
  4. 有效期(Validity Period)

    • 证书的有效期,包括开始日期和结束日期。
  5. 证书序列号(Certificate Serial Number)

    • 证书的唯一标识符。
  6. 证书使用范围(Key Usage)

    • 指定证书可以用于哪些目的(如数字签名、数据加密等)。
  7. 扩展信息(Extensions)

    • 其他附加信息,如证书策略、CRL(证书吊销列表)分发点等。
  8. 签名(Signature)

    • 证书颁发机构对证书内容的数字签名,用于验证证书的完整性和真实性。

数字证书的作用

  1. 身份验证

    • 客户端可以通过验证数字证书的签发者和签名,确保证书的真实性,从而确认服务器的身份。
  2. 公钥分发

    • 数字证书中包含服务器的公钥,客户端可以使用这个公钥加密敏感数据(如预主密钥),确保传输过程中的数据安全。

数字证书的结构

一个标准的X.509数字证书结构如下:

plaintext 复制代码
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 123456789 (0x75bcd15)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3
        Validity
            Not Before: Jan 1 00:00:00 2024 GMT
            Not After : Jan 1 00:00:00 2025 GMT
        Subject: CN=example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:af:8c:45:3b:e2:ad:e2:29:ab:ee:6f:12:3f:ad:
                    59:e2:31:92:e3:ef:dd:7b:58:e2:ab:cb:13:57:aa:
                    ...
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha256WithRSAEncryption
         a3:9e:87:29:23:32:cd:50:30:b7:0b:69:ba:c7:3b:17:cd:18:
         62:aa:72:bd:e6:df:67:1c:2e:72:e6:df:14:39:b2:cd:22:75:
         ...

详细的握手过程示例

为了更好地理解数字证书在SSL/TLS握手过程中的作用,以下是一个详细的示例:

  1. 客户端Hello

    • 客户端发送支持的SSL/TLS版本、加密套件和一个随机数给服务器。
  2. 服务器Hello

    • 服务器选择加密套件,发送服务器的随机数和服务器的数字证书给客户端。
  3. 验证服务器证书

    • 客户端使用预先安装的CA公钥验证服务器证书的签名,确保证书未被篡改。
    • 检查证书的有效期和颁发者,确保证书有效且可信。
  4. 生成预主密钥

    • 客户端生成一个预主密钥,用服务器的公钥加密后发送给服务器。
    • 服务器使用其私钥解密预主密钥。
  5. 生成对称密钥

    • 客户端和服务器使用预主密钥、客户端随机数和服务器随机数生成会话密钥,用于加密后续通信。

通过这个过程,客户端和服务器之间建立了一个安全的加密通道,确保数据传输的保密性和完整性。

相关推荐
九河云2 小时前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws
Lary_Rock2 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
幺零九零零3 小时前
【计算机网络】TCP协议面试常考(一)
服务器·tcp/ip·计算机网络
云飞云共享云桌面4 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
幺零九零零7 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
free8 小时前
netstat中sendq/recvq用于排查发送端发送数据的问题
服务器
力姆泰克9 小时前
看电动缸是如何提高农机的自动化水平
大数据·运维·服务器·数据库·人工智能·自动化·1024程序员节
力姆泰克9 小时前
力姆泰克电动缸助力农业机械装备,提高农机的自动化水平
大数据·服务器·数据库·人工智能·1024程序员节
程思扬9 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节
sun0077009 小时前
拷贝 cp -rdp 和 cp -a
linux·运维·服务器