SSL 握手机制

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

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、付费专栏及课程。

余额充值