从基础到进阶:HTTPS协议中的SSL握手细节解析
一、引言
随着互联网技术的不断发展,网络安全问题日益受到人们的关注。
为了保障数据在传输过程中的安全,HTTPS协议应运而生。
HTTPS协议通过SSL(Secure Sockets Layer)握手过程实现了对数据的加密传输。
本文将详细解析从基础到进阶的HTTPS协议中的SSL握手过程。
二、HTTPS与SSL概述
1. HTTPS协议:HTTPS是一种通过计算机网络进行安全通信的传输协议。它在HTTP协议的基础上,使用SSL/TLS协议进行数据加密、完整性校验和身份验证。
2. SSL协议:SSL(Secure Sockets Layer)是一种安全的通信协议,用于在网络传输中保护数据的安全。它通过握手过程建立安全连接,实现数据的加密传输。
三、SSL握手过程基础解析
SSL握手过程是一个协商和认证的过程,以下是基本的SSL握手步骤:
1. 客户端发送客户端随机数、客户端证书等信息给服务器。
2. 服务器验证客户端证书,确认其身份。
3. 服务器发送服务器随机数、公钥等信息给客户端。
4. 客户端验证服务器证书,并生成预主密钥(Pre-Master Secret)。
5. 客户端和服务器根据随机数生成主密钥(MasterSecret),用于加密后续通信的数据。
6. 客户端和服务器完成握手过程,建立安全连接。
四、SSL握手过程进阶解析
在实际应用中,SSL握手过程可能会涉及更多的细节和扩展功能,以下是进阶解析:
1. 双向认证:除了服务器验证客户端证书外,还需要客户端验证服务器证书,确保通信双方的可靠性。这种情况下,需要在握手过程中交换更多的证书信息。
2. 会话恢复:为了提高通信效率,SSL握手过程支持会话恢复功能。当客户端和服务器之间已经建立过安全连接时,可以利用之前的会话参数恢复连接,减少握手过程中的计算开销。
3. 安全重协商:在某些情况下,可能需要重新协商SSL连接的安全参数。这时需要进行安全重协商握手过程,确保新的安全参数能够保护数据的传输安全。
4. 扩展功能:SSL握手过程还支持各种扩展功能,如应用程序协议协商(Application Layer Protocol Negotiation,ALPN)、心跳消息等。这些扩展功能可以提高SSL连接的灵活性和性能。
五、SSL握手过程中的安全性保障
SSL握手过程中的安全性保障主要包括以下几个方面:
1. 数据加密:通过生成的主密钥对通信数据进行加密,确保数据在传输过程中的安全性。
2. 身份验证:通过证书验证通信双方的身份,防止中间人攻击和冒充攻击。
3. 完整性校验:通过消息认证码(MAC)等技术对通信数据进行完整性校验,确保数据在传输过程中未被篡改。
六、结论
本文详细解析了从基础到进阶的HTTPS协议中的SSL握手过程。
通过了解SSL握手过程的细节和扩展功能,我们可以更好地理解HTTPS协议如何保障数据传输的安全性。
在实际应用中,我们需要根据具体的需求和场景选择合适的SSL配置和功能,以确保网络传输的安全性和性能。
HTTPS请求证书时候的握手是SSL/ TLS 还是TCP的握手?
1. HTTPS是基于SSL安全连接的HTTP协议。
HTTPS通过SSL提供的数据加密、身份验证和消息完整性验证等安全机制,为Web访问提供了安全性保证,广泛应用于网上银行、电子商务等领域。
此图为HTTPS在网上银行中的应用。
某银行为了方便客户,提供了网上银行业务,客户可以通过访问银行的Web服务器进行帐户查询、转帐等。
通过在客户和银行的Web服务器之间建立SSL连接,可以保证客户的信息不被非法窃取。
2.只需要验证SSL服务器身份,不需要验证SSL客户端身份时,SSL的握手过程为:(1) SSL客户端通过Client Hello消息将它支持的SSL版本、加密算法、密钥交换算法、MAC算法等信息发送给SSL服务器。
(2) SSL服务器确定本次通信采用的SSL版本和加密套件,并通过Server Hello消息通知给SSL客户端。
如果SSL服务器允许SSL客户端在以后的通信中重用本次会话,则SSL服务器会为本次会话分配会话ID,并通过Server Hello消息发送给SSL客户端。
(3) SSL服务器将携带自己公钥信息的数字证书通过Certificate消息发送给SSL客户端。
(4) SSL服务器发送Server Hello Done消息,通知SSL客户端版本和加密套件协商结束,开始进行密钥交换。
(5) SSL客户端验证SSL服务器的证书合法后,利用证书中的公钥加密SSL客户端随机生成的premaster secret,并通过Client Key Exchange消息发送给SSL服务器。
(6) SSL客户端发送Change Cipher Spec消息,通知SSL服务器后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。
(7) SSL客户端计算已交互的握手消息(除Change Cipher Spec消息外所有已交互的消息)的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL服务器。
SSL服务器利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。
(8) 同样地,SSL服务器发送Change Cipher Spec消息,通知SSL客户端后续报文将采用协商好的密钥和加密套件进行加密和MAC计算。
(9) SSL服务器计算已交互的握手消息的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL客户端。
SSL客户端利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。
SSL客户端接收到SSL服务器发送的Finished消息后,如果解密成功,则可以判断SSL服务器是数字证书的拥有者,即SSL服务器身份验证成功,因为只有拥有私钥的SSL服务器才能从Client Key Exchange消息中解密得到premaster secret,从而间接地实现了SSL客户端对SSL服务器的身份验证。
& 说明:l Change Cipher Spec消息属于SSL密码变化协议,其他握手过程交互的消息均属于SSL握手协议,统称为SSL握手消息。
l 计算Hash值,指的是利用Hash算法(MD5或SHA)将任意长度的数据转换为固定长度的数据。
基于国密算法SM2 SSL证书的https加密, 如何实现?
SSL握手协议的过程国密SSL握手协议过程如下:(1)交换Hello消息来协商密码套件,交换随机数,决定是否会话重用;(2)交换必要的参数,协商预主密钥(3)交换证书信息,用于验证对方(4)使用预主密钥和交换的随机数生成主密钥(5)向记录层提供安全参数(6)验证双方计算的安全参数的一致性、握手过程的真实性和完整性
SSL工作原理?
和 2 只提供服务器认证。
版本 3 添加了客户端认证,此认证同时需要客户端和服务器的数字证书。
SSL 握手SSL 连接总是由客户端启动的。
在SSL 会话开始时执行 SSL 握手。
此握手产生会话的密码参数。
关于如何处理 SSL 握手的简单概述,如下图所示。
此示例假设已在 Web 浏览器 和 Web 服务器间建立了 SSL 连接。
(1) 客户端发送列出客户端密码能力的客户端“您好”消息(以客户端首选项顺序排序),如 SSL 的版本、客户端支持的密码对和客户端支持的数据压缩方法。
消息也包含 28 字节的随机数。
(2) 服务器以服务器“您好”消息响应,此消息包含密码方法(密码对)和由服务器选择的数据压缩方法,以及会话标识和另一个随机数。
注意:客户端和服务器至少必须支持一个公共密码对,否则握手失败。
服务器一般选择最大的公共密码对。
(3) 服务器发送其SSL数字证书。
(服务器使用带有 SSL 的 X.509 V3 数字证书。
)如果服务器使用 SSL V3,而服务器应用程序(如 Web 服务器)需要数字证书进行客户端认证,则客户端会发出“数字证书请求”消息。
在 “数字证书请求”消息中,服务器发出支持的客户端数字证书类型的列表和可接受的CA的名称。
(4) 服务器发出服务器“您好完成”消息并等待客户端响应。
(5) 一接到服务器“您好完成”消息,客户端( Web 浏览器)将验证服务器的SSL数字证书的有效性并检查服务器的“你好”消息参数是否可以接受。
如果服务器请求客户端数字证书,客户端将发送其数字证书;或者,如果没有合适的数字证书是可用的,客户端将发送“没有数字证书”警告。
此警告仅仅是警告而已,但如果客户端数字证书认证是强制性的话,服务器应用程序将会使会话失败。
(6) 客户端发送“客户端密钥交换”消息。
此消息包含 pre-master secret (一个用在对称加密密钥生成中的 46 字节的随机数字),和 消息认证代码 ( MAC )密钥(用服务器的公用密钥加密的)。
如果客户端发送客户端数字证书给服务器,客户端将发出签有客户端的专用密钥的“数字证书验证”消息。
通过验证此消息的签名,服务器可以显示验证客户端数字证书的所有权。
注意: 如果服务器没有属于数字证书的专用密钥,它将无法解密 pre-master 密码,也无法创建对称加密算法的正确密钥,且握手将失败。
(7) 客户端使用一系列加密运算将 pre-master secret 转化为 master secret ,其中将派生出所有用于加密和消息认证的密钥。
然后,客户端发出“更改密码规范” 消息将服务器转换为新协商的密码对。
客户端发出的下一个消息(“未完成”的消息)为用此密码方法和密钥加密的第一条消息。
(8) 服务器以自己的“更改密码规范”和“已完成”消息响应。
(9) SSL 握手结束,且可以发送加密的应用程序数据。