欢迎来到天天文库
浏览记录
ID:30844310
大小:67.37 KB
页数:5页
时间:2019-01-04
《第二章对ssl握手协议的研究》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第一章.对SSL的基木概念和框架的介绍第二章•对SSL握手
2、办议的研究(part-l)第三章•对SSL握手协议的研究(part-2)第四章.对SSL握手协议细节和实现的介绍第五章•对SSL记录协议细节和实现的介绍第六章•对SSL的安全性分析第七章.举例一种将usbkey融入javaJSSE框架的解决方案•Client处理和回应ServerHello阶段客户端收到服务器发过来的那些消息,耍做的是验证服务器证书,发送自己的证书(如果双向认证),发送计算出的预主密码,发送证书验证消息。ClientCertifi
3、cate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec]ClientFinishedMessage*Optionalorsituationntmessages[ChangeCipherSpec]isnotaTLShandshakemessagebutisanindependent」TLSProtocolcontenttypethathelpsthepartiesavoidapipelinestall.收到ServerHello在serverhel
4、lo阶段连续的发了多个消息,最先发出的是serverhello,client收到后将SSL会话ID,服务器端的一个随机数,协商岀的SSL协议版本号以及密钥套件放到会话缓存中。收到ServerCertificates接下来收到的应该是server端的证书消息了,取出所冇的消息,最头上的是server证书,最末端的CA根证书。在SUNJDKJSSE中实现的SSL是这样处理的:从SSLContex屮取出trustmanager,如果用过javaSSL编程的同学应该知道,可以口己实现X509TrustManage
5、r和X509KeyManager两个接口来定制对证书的验证,sunjdk屮就是调用这个trustmanager的验证方法来验证证书(在解决浏览器检测到证书是口签名的时候跳出警告框的问题就是可以自己实现这个trustmanager來让浏览器不跳出警告框)。JDK当然也冇默认的证书验证实现,就是验证签名冇效性,验证证书是否过期等。证书签名的有效性验证是在取证书链中某证书中的公钥验证前一个证书的签名,这样第一个证书就是用第二个证书的公钥來验证,那冇人可能会问最后的根CA的证书谁来验证?根CA的证书是自签名的,就
6、是自己给自己签名,没人管的了,JDK中某个文件中有存储一堆可信任的证书发行机构的证书列表,如果你的根CA在那个列表屮并对比后确实是那个根CA的证书那就0K,验证通过,这个可信任的机构也可以门己实现那个trustmanager來添加设置。收到ServerKeyExchange消息RSA方式密钥交换消息则把消息中的加密用公钥放入会话缓存中,作为客户端这边握手阶段的写密钥而不是用服务器证书中的公钥。DH方式的消息就把消息中的p,g,Ys三个参数记录下来,有这些client端就可以计算岀pre-master了,只
7、要冋头再把自己这边的Yc参数发过去,server端就也能计算出相同的pre-maseter了。将消息中的证书类型列表和可信任证书发行机构列表保存下來,可在后面发送客户端证巧时候拿来筛选证巧用。收到ServerHelloDone消息收到这个消息后client端开始向server发消息了发送ClientCertificates消息如果是server端要求客户端认证就会发这个消息,否则不发。客户端可能会有多个证书,在JSSE里头多个客户端证书存储在keystore里头,选哪个发过去呢?这吋候要用到server端
8、之前发的certrequest消息中的支持的证书类型列表和信任的根CA列表,满足这个两个条件的第一个证书链就会被选屮作为客户端证卩。发送ClientKeyExchange消息若是RSA方式密钥交换,则产生一个48位随机数作为pre-master并用服务器公钥加密后发出去若是DH方式的密钥交换,则根据sever的g,p,Ys,产生Xa和Yc,Xa和Ys能计算出pre-master,把产生的Yc放入消息中发给server,这样server用它的Xb和Yc也能计算出pre-master了。计算出预主密码后就顺便
9、把主密码(mastersecret)给算岀来了。算出主密码就把对称密钥产生出來了。发送Certificateverify消息这个消息是可选的,只冇在客户端发送了自己证书到服务器端,这个消息才需要发送。发这个消息的R的是让服务器验证发消息的客户端和客户端证书的真实所有者。这个消息中要包含一个签名,签名里头内容就是从clienthello开始到口前为止所有握手消息(不包括木消息)的摘要,主密码,若是RSA方式则要把这些内容分别用M
此文档下载收益归作者所有