学习,java applet,ssl,工作

22号到现任公司报道,一直到现在,这阶段接收了一个java applet的项目,我需要做的就是加入对https的支持。做其实很简单,直接调用JSSE就可以了。一直到今天才能算基本完成,有些人可能不明白,既然已经有了api供你调用,应该来说不需要花这么长的时间啊。这可能就是研发部门和一般接其他单子的公司的区别了吧。

现任的主管,不关心你是如何实现的,而是关心,你是否真正理解这种协议。就拿https来说,主要就是ssl协议。你是否真正的懂得ssl协议,按主管的话说,你做一种技术,就要精通这门技术所使用的protocol,想想的确是这样,按照以前的方式,google到了可以使用jsse来添加对https的支持,那么基本就直接会接着去搜索jsse如何使用,然后运用到自己的项目里。但是就这样的话,最多也就只是提高了一点搜索的能力,其他的,没学到什么。而主管需要的,就是我去学ssl去分析ssl。要了解ssl的流程等等。。。这么多天的学习下来,不说我对ssl多么的精通,起码,你问一些有关ssl的问题,我还是能回答上来的。

这里就写一下有关ssl的一些知识。以便以后查看。

ssl为网络通信提供安全及数据完整性的一种安全协议。 Ssl层是在tcphttp层之间。Ssl协议分两部分:Handshake ProtocolRecord ProtocolHandshake Protocol是用来协商密钥,而Record Protocol用来定义传输的格式。

这里关于ssl加密算法就不多解释了,水平不够,解释不清楚。

接下来我们看一下ssl的流程。(这里引用51cto的图来说明)

 

SSL握手协议的具体工作过程描述如下。

 

① 客户(client)端发送ClientHello信息给服务器(Server)端,Server回答ServerHello。这个过程建立的安全参数包括协议版本、“会话”标识、加密算法、压缩方法。另外,还交换两个随机数:ClientHello.Random1和ServerHello.Random,用于计算“会话主密钥”。

② Hello消息发送完后,Server端会发送它的证书和密钥交换信息。如果Server端被认证,它就会请求Client端的证书,在验证以后,Server就发送HelloDone消息,以示达成了握手协议,即双方握手接通。

③ Server请求Client证书时,Client要返回证书或返回没有证书的指示,这种情况用于单向认证,即客户端不装有证书。然后,Client发送密钥交换消息。

④ 服务器Server此时要回答“握手完成”消息(Finished),以示完整的握手消息交换已经全部完成。

⑤ 握手协议完成后,Client端即可与Server端传输应用加密数据,应用数据加密一般是用第②步密钥协商时确定的对称加/解密密钥

 

1.在实际的抓包过程中,没有发现这个random值。不知何故。

具体看两个截图。

 

SSL部分到这里基本就结束了,但是在实际编程过程中,还遇到了一个比较讨厌的问题,就是证书的验证,起先是空实现了一个X509TrustManager接口,这样能访问,但是问题是安全性不够,空实现是信任所有证书的,并没有对证书进行认真,这个就和http方式没什么区别了。无奈只好继续学习并google,网络上大部分的确抄袭的比较厉害啊,看了很多文章都是一样的,并没有获取到什么有用的信息。几天google下来,就看到一篇写X509TrustManager如何具体实现的,随即我也尝试了一下,但是由于我不知道所需连接的camera的证书的具体信息,这个方法也就没法使用。继续google,一天在看iteye的一篇文章的时候,看到一句话,意思大体是将一家银行提供的root.cer导入到jre里的cacerts中。原来如此。马上把网页中copy出来的证书导入到cacerts中,ok,成功了。下面的就是一些细节的修正,不提了。

 

随后好好研究了cacerts文件,发现它对于ssl来说,是很重要的一个文件。关于这个文件,有这些描述。

 

JSSE中,有一个信任管理器类负责决定是否信任远端的证书,这个类有如下的处理规则:

 

 ⑴ 果系统属性javax.net.sll.trustStore指定了TrustStore文件,那么信任管理器就去jre安装路径下的lib/security/目录中寻找并使用这个文件来检查证书。

 

 ⑵ 果该系统属性没有指定TrustStore文件,它就会去jre安装路径下寻找默认的TrustStore文件,这个文件的相对路径为:lib/security/jssecacerts

 

 ⑶ 如果 jssecacerts不存在,但是cacerts存在(它随J2SDK一起发行,含有数量有限的可信任的基本证书),那么这个默认的TrustStore文件就是cacerts

 

 

 

Ok,代码的编写基本完成了,eclipse中也可以连接上camera了,嵌入到网页中运行,出错,access denied,这个是applet的安全限制。这里就不多讨论了,直接Google就可以找到很多文章。对jar签名解决问题。测试ok,完成,等待下午的demo时间。

 

洋洋洒洒写了不少字,自我感觉来到这家公司是我人生路上比较好的一个可以说转折点吧。之前的外出培训可以说算是一个。这个一定算,因为在这里,我知道,我要做什么东西,我就要去学习他的protocol,我就要成为他的专家。好的,努力奋斗。


posted @ 2012-02-23 16:33  轩Δ辕  阅读(467)  评论(0编辑  收藏  举报