我创建了一个带有证书的信任库和带有私钥的密钥库。我已经放置了以下代码,加载了 trsustore 管理器和密钥库管理器,然后创建了 SSL 上下文的实例。
每当我向 web 服务发出请求时,都会调用下面的代码。我们正在使用axis2 API。
SSLContext context = SSLContext.getInstance(protocolVersion);
context.init(keyManagers, trustManagers, null);
SSLSocketFactory socketFactory = context.getSocketFactory();
SslContextedSecureProtocolSocketFactory secureProtocolSocketFactory = new SslContextedSecureProtocolSocketFactory(context);
Protocol authhttps = new Protocol("https", secureProtocolSocketFactory, port);
HttpClient httpclient = new HttpClient();
httpclient.getHostConfiguration().setHost(hostname, port, authhttps);
GetMethod httpget = new GetMethod("/RTAPService/RTAPService");
也试过这个 GetMethod httpget = new GetMethod("/");
httpclient.executeMethod(httpget);
它给了我以下错误..
org.apache.axis2.AxisFault: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
其中主机名是“qartap.csnet.assurity.sg”,我的网络服务 URL 是“ https://qartap.csnet.assurity.sg:8443/RTAPService/RTAPService ”
问题是当我注册我的“HTTPS”协议时,它会影响我的整个应用程序,我可以以某种方式为特定主机或特定网络服务设置这些..???
我想使用主机名设置它还是自己创建新协议...我尝试了此处解决方案中给出的方法。但它给了我以下例外..
在将 web 服务 URl 传递给生成的存根构造函数时,我用自己定制的“myHTTPS”替换了 url 中的“HTTPS”。
The system cannot infer the transport information from the myhttps://serverUrl:7001/app/services/RTAPDevService.RTAPDevServiceHttpSoap12Endpoint/ URL.