这是一个比较难的问题。
基本思路:
1、Java客户端需要下载一个证书,这个证书是可以通过浏览器下载,或者从服务器拷贝也行。
- 一般是通过新建一个509TrustedManager,它里面有各种checkServer,checkClient的方法,验证通过了才行。不过为了偷懒,一般会不实现,用在线上是有风险的,仅用于demo阶段。当然,在创建这个Manager时,需要加载Java客户端本地的证书。
- 如果不加载证书的话,则会报handShake握手的异常。
2、暴露的问题:
- 在网上下载的例子中可以观察到,请求实体用到了accept=text/xml这种格式,暴露了对http底层通讯原理还不是特别了解。
- 加载Java证书那个地方始终通不过,我是本地自己装了个tomcat,自己创建了一个证书,叫.keystore文件,但不知道如何被客户端加载。
- 还是未能完全明白浏览器在利用https时,客户端和服务端是如何加密保护的。因为浏览器在向服务器发起请求时,服务器是将公钥返回给客户端,这时难道就不能截获吗?还有,https是既利用了非对称加密,也利用了对称加密,在非对称加密完后,会产生一个randomPassword,然后后面交流就全用这个randomPassword来进行对称加密了,那我就在想了,这时再进行拦截不就行了?
- 现在才发现,通讯才是最难的。为啥会出现乱码?因为从一个请求,先到Java客户端,再到tomcat,再返回,任何一个地方都有可能引起乱码,所以必须搞清楚每一个地方
-----
- demo代码已经放到上