论坛首页 Java企业应用论坛

ssl握手过程和服务器认证

浏览 3869 次
精华帖 (0) :: 良好帖 (8) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-12   最后修改:2009-02-16
转载请注明出处http://chillwarmoon.iteye.com
1.client向server端发送ssl版本号,cipher设置,随机数(randomly generated data)和其他sever端所要求的信息。
2.server端向client端发送ssl版本号,cipher设置,随机数(randomly generated data)和其他client端所要求的信息。server发送其证书信息,如果是双向认证(client请求server端资源时,server需要对client端进行认证),则请求client发送证书。
3.client端根据server发送过来的信息来认证server,如果认证失败,提示client user不能够建立encrypted and authenticated connection.如果认证成功,执行4。
4.client利用handshake过程所产生的数据为会话建立premaster secret,用server的public key(在第2步的server证书中得到)对其加密。
5.如果server端需要双向认证,client端对another piece of data进行签名,这个数据对于handshake是唯一的,client和server都知道该数据。client发送这个signed data,client的证书和premaster secret.
6.如果server端需要双向认证,server对client端进行认证,如果认证失败,则结束会话,否则server利用private key将premaster secret解密,将解密的premaster secret经过一系列操作生成master secret(client也执行了这些操作,生成了master secret)。
7.client和server利用master secret生成session key,也就是SSL session中用到的对称密钥。
8.client发送消息通知server:以后发消息都用session key加密,然后发送一个加密消息,"client端的handshake完成"。
9.server发送消息通知client:以后发送消息用session key加密,然后发送一个加密消息,"server端的handshake完成"。
10.SSL handshake完成了,SSL session开始了。

Server Authentication
client端接收到了server的证书,怎样和client中的public key来认证服务端呢?需要回答4个问题:
1.server的证书过期了吗?
2.server证书中的issuing CA是trusted CA?
  如果server证书中的issuing CA的distinguished name和client的trusted CA的某个证书的distinguished name相同,则答案是肯定的。
  如果server证书中的issuing CA没有在trusted CA列表中,但the client can verify a certificate chain ending in a CA that is on the list,仍然可以。
3.client的issuing CA的public key能否验证server证书中的issuer's digital signature?
4.在server证书中的domain name和server的domain name是不是相同的?

如果这些问题都是肯定的,则server认证成功。

英文原文见:
http://docs.sun.com/source/816-6156-10/contents.htm#1045936
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics