我有以下情形:两个Java应用程序在同一Tomcat服务器上运行 - 我们姑且称之为应用程序A和应用B - 他们需要跟每个其他通过已经启动并运行在App A上的web服务。此webservice只接受已认证的客户端(clientAuth =“true”)。同一Tomcat服务器上的两个应用程序之间的双向SSL
毕竟被配置,我的Tomcat,作为客户端,发送一个空证书链到服务器(其是在同一Tomcat)。这是我所做的。
keytool -genkeypair -keyalg RSA -keysize 2048 -keystore keystore.jks -alias server
然后导出该证书:
keytool -exportcert -keystore keystore.jsk -alias server -file server.crt
并把它添加到信任:
keytool -importcert -keystore truststore.jsk -alias server -file server.crt
我使用密钥工具生成的服务器使用自签名证书SSL协商如下:
- 客户打招呼
- 服务器打招呼,并提供其证书(以上生成)为 客户
- 客户接受它(因为它是在信任)
- 服务器通过提供的名单,需要客户端证书有效的DNS(包含单个条目,上面生成的证书)
- 客户端不知何故决定它不具有有效证书,并发送一个空的证书链
- SSL握手失败
我没有张贴实际的SSL日志,因为客户端和服务器都是一样的Tomcat,所以一切都是混在一起的混乱。
我做了什么错在这里?请记住,这两个应用程序位于同一台服务器上,且证书是自签名的。我还做了一个测试,在其中生成了另一个自签名证书,将其导出到.p12文件并将其安装到浏览器中,然后通过URL直接将该web服务调用到地址框中,其工作完美无瑕。
谢谢!
问题不在于关键字,而在于如何初始化App B使用的HTTPS连接/ Web服务客户端。 – Robert
@Robert我使用wsimport命令生成的存根使用WSDL URL(以“ https“并使用端口8443,正确配置)。在我的代码中,我使用这个:'MyWebService service = new MyWebService(url); IMyWebService client = service.getMyWebServicePort(); client.myMethod(...);'这个类MyWebService扩展了javax.xml.ws.Service。 – Khand