SSL 握手机制

本文详细介绍了SSL握手过程中涉及的各种消息交换及其作用,包括客户端和服务端的Hello消息、证书交换、密钥协商等步骤,并解释了如何通过这些交互来确保通信的安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

都是些啥哦, 证书包含的是公钥, 私钥总是秘密的, 不会在网络上传播...

SSL 的握手过程通常是酱紫的, 可以看看RFC文档,写的很详细, 代码看 openssl , 应该算比较简单易懂, 自己写也不是非常麻烦...
1) Client->Server : ClientHello 通常包含这些东西..
clientRand : client 生成的随机数序列
sessionID : 用于session恢复的过程, 简化的SSL握手过程,在第一次的握手工程中服务器生成的..
cipherSuiteList , CompressionMethodList : 客户端支持的加密算法和压缩算法列表

2) Server->Client :
21) ServerHello : 通常包含这些东西..
serverRand : server 生成的随机数序列
sessionID : 如果 ClientHello.sessionID 在服务器端存在, 则服务器返回相同的 SessionID
以提示这是一次简化的握手过程.
CipherSuite CompressionMethod : 服务器选择的加密算法和压缩算法

A: 不要求服务器鉴权的情况, 不能保证服务器是否伪装, 不安全, 现在可能很少遇到
22) ServerKeyExchange 包含服务器公钥(没有证书)

B: 要求服务器鉴权,不要求客户端证书的情况, 这种用的最多.
22) Certificate : 服务器证书

C: 要求服务器鉴权,要求客户端证书, 在安全性要求很高的场合使用, 比如网银啥的
22) Certificate : 服务器证书
23) CertificateRequest : 客户端证书请求

2E) ServerHelloDone

3) Client->Server :
A B )
31) ClientKeyExchange 服务器公钥加密的 前主密文( PRE_MASTER_SECRET )
C )
31) Certificate 客户端证书
32) ClientKeyExchange 服务器公钥加密的 前主密文( PRE_MASTER_SECRET )
33) CertificateVerify 客户端证书对之前握手数据的签名

3E) Finish

4) Server->Client :
41) ChangeCipherSpec
42) Finish

服务器用自己的私钥解密 ClientKeyExchange 中包含的加密的前主密文, 这样服务器和客户端就可以用相同的
参数( clientRand , serverRand , PRE_MASTER_SECRET ) 计算主密钥( MASTER_SECRET ) , 最后双方用同样的
算法对主密钥进行扩展(比如PRF啥的), 生成会话密钥( read_key , write_key , read_mac , write_mac )

session恢复,简化的握手过程:
1) Client->Server : ClientHello
2) Server->Client :
21) ServerHello
22) ChangeCipherSpec 密钥改变
23) Finish
3) Client->Server
31) ChangeCipherSpec
32) Finish

客户端和服务器用相同的参数( ClientRand , ServerRand , 上次会话的主密钥 ) 计算此次会话的主密钥.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值