SSL握手协议是建立HTTPS连接的进程的技术名称。几乎所有重要的工作都是在这个协议中完成的。换句话说,它在服务器和客户端之间建立安全通道。
SSL握手协议的主要目的是执行具有安全连接所需的所有加密工作,例如检查SSL证书的真实性,它们是否由受信任的证书颁发机构创建和签名,证明服务器拥有的私钥与证书相关联,并且整个SSL握手是在几百毫秒内完成的。此外,SSL握手是HTTPS连接中发生的第一件事,甚至在网页完全加载之前。
每个软件彼此不同。因此,握手协议的第一步允许客户端和服务器共享其功能,以找出相互支持的加密功能。例如,Web浏览器是典型的客户端之一,但它们的功能因Microsoft Internet Explorer,GoogleChrome和Mozilla Firefox等浏览器而异。同样,当涉及到服务器时,如Windows Server,Apache和NGINX,它们的功能彼此不同。
虽然有一点需要注意,SSL握手是一系列几个步骤,这些步骤是为了完成以下三个主要任务而完成的。
- 交换加密功能
- SSL/TLS证书的身份验证
- 交换或生成会话密钥
如果您有兴趣了解确切的过程是什么,以下是完整的说明步骤。(请注意,在即将推出的协议版本TLS1.3中,握手设计已更改。因此,这些步骤与TLS1.2相关。
步骤编号 | 消息 | 行动 |
---|---|---|
1 | 客户你好 | 这是第一步。在这里,客户端通过发送消息”ClientHello”来启动握手,该消息推荐将在整个 SSL 会话期间使用的 SSL 参数。 |
2 | 服务器你好 | 在这里,服务器使用消息”ServerHello”响应客户端,其中包含从提供的列表中选定的 SSL 参数,这些参数将在 SSL 会话期间使用。如果客户端和服务器无法共享公共参数,则连接将立即终止。 |
3 | 证书 | 在这里,服务器将向客户端发送 SSL 证书链(包括叶证书和中间证书)。然后,客户端将通过验证证书和证书链的数字签名并检查证书数据是否存在任何潜在问题(证书是否过期,域名错误等)来开始检查证书是否合法。客户端还将确保服务器拥有证书的私钥,并且整个过程在密钥交换/生成期间完成。 |
4 | ServerKeyExchange | 这是一条可选消息,当某些密钥交换方法要求服务器提供其他数据时,需要该消息。 |
5 | 服务器HelloDone | 在这里,服务器完成了 SSL 协商的一部分。换句话说,此消息”ServerHelloDone”告诉客户端所有消息都已发送过来。 |
6 | 客户端密钥交换 | 在这里,客户端发送有关会话密钥的信息,该密钥是使用服务器的公钥加密的。 |
7 | 更改密码规格 | 在这里,客户端向服务器提供指令,指示它为将来发送的所有消息激活所有协商的 SSL 参数。 |
8 | 完成 | 客户端指示服务器验证 SSL 协商是否成功。 |
9 | 更改密码规格 | 在这里,服务器向客户端发出指令,以激活所有协商的 SSL 参数,以便将来发送消息。 |
10 | 完成 | 最后,服务器指示客户端验证 SSL 协商是否成功。 |
完成上述步骤表示完成SSL握手。现在,双方将拥有会话密钥,并将开始与加密和经过身份验证的连接进行通信。此时,可以发送”应用程序”数据的第一个字节(属于双方将通信的实际服务的数据-即网站的HTML,Javascript等)。