到目前为止,我们一直在使用soapui,但是我们需要将客户机过程写入java程序。我发现了以下内容:工作soap客户机示例。为了重新获得saaj,我甚至将我的项目移植到java-8。
但是,我有一个似乎相当独特的问题:目标服务器提供的证书具有与服务器的url不匹配的cn/san。事实上,我们有很多这样的服务器,我们不能访问他们足够快的证书修复之前,我们失败!
我的想法是,如果soapui在没有任何配置的情况下能够使用wsdl并调用服务器,那么java程序肯定能够处理不匹配的服务器证书。
问题是如何调整soapconnectionfactory(我有一种感觉,它可能在那里)而不关心名称不匹配?
我在rest客户机上也做过类似的事情,它链接到一个 SSLSocketFactory
... 然后: return SSLSocketFactory(context, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)
解决了我的问题。。。我不知道soapconnectionfactory是否有sslsocketfactory或者其他什么东西,在进行sslsoap连接时,我可以通过黑客攻击忽略坏证书。
我的情况示例:
Endpoint URL: https://myapiserver.uk
Server certificate SAN: myapi.org.uk
Java exception when making the SOAP call:
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
Caused by: javax.net.ssl.SSLHandshakeException: No subject alternative DNS name matching myapiserver.uk found.
Caused by: java.security.cert.CertificateException: No subject alternative DNS name matching myapiserver.uk found.
我试过设置:system.setproperty(“com.sun.jndi.ldap.object.disableendpointidentification”,“true”)
(运气不好)
我尝试反编译javax.xml.soap.soapconnectionfactory,但很快我就无法理解了(这是一些抽象的自我引用的东西,让我想知道“实际的东西在哪里?”
我认为我的解决方案是反编译和重新实现soapconnectionfactory以及它下面的任何东西,直到我能够达到我可以参数化的程度,无论我是想要“严格的soapssl强制”模式还是“只需要移动东西”模式
暂无答案!
目前还没有任何答案,快来回答吧!