我有一个Java应用程序,它使用不同的WebServices。现在,我必须使用一个需要双向身份验证的WebService。我使用SSLClientAxisEngineConfig实现(https://github.com/linhkuivanen/axistools)作为参数发送给扩展org.apache.axis.client.Service的类。啊,真灵。但前提是它是某些Axis Client的第一次使用。在此之后,如果我使用一个不需要证书的'https‘的WebService,则会出现“不受信任的服务器证书链”错误。
如果首先使用不需要证书身份验证的Webservice,当我尝试使用另一个需要身份验证的when服务时,就会出现“握手失败”错误。
我假设Axis有某种可以重用第一个配置的缓存,但我无法找到解决问题的方法。
编辑:我解决了这个问题。我用wsdl2java (Axis2-1.7.8)生成了一个新的Axis客户机,而不是使用生成器。在使用WebService之前,我使用客户端证书和仙人掌注册了一个新的https协议:
Protocol protocol = new Protocol("https", socketFactoryDinamico, 443);
Protocol.registerProtocol("https", protocol);在使用它之后,我取消了协议的注册:
Protocol.unregisterProtocol("https");在此之后,我可以在没有证书身份验证的情况下使用其他WebServices,而不会出现问题。
Edit2:
Eclipse生成的类:
public class NfseWSServiceLocator extends org.apache.axis.client.Service implements NfseWSService {
}
public interface NfseWSService extends javax.xml.rpc.Service {
}以及由Axis2生成的类:
public class NfseWSServiceStub extends org.apache.axis2.client.Stub {
}发布于 2018-10-09 03:52:56
“不受信任的服务器证书链”意味着客户端不信任试图建立连接的服务器证书。为了正确配置启用HTTPS的通信场景,通信双方必须相互信任。
RFC 5246定义如下:
unknown_ca
A valid certificate chain or partial chain was received, but the
certificate was not accepted because the CA certificate could not
be located or couldn't be matched with a known, trusted CA. This
message is always fatal.通常是需要信任服务器证书链来建立连接的客户端,因为服务器可以在匿名模式下运行,而不是从对等方请求客户端证书。
https://stackoverflow.com/questions/52708887
复制相似问题