我正在为供应商控制的SOAP web服务构建客户端。不幸的是,他们的开发者服务器有一个我无法验证的不安全(自签名)证书。每当我尝试发出请求时,Apache Axis都会失败。有没有办法忽略SSL验证错误?我显然不想为生产做这件事,但它在我的开发环境中会很好。忽略Axis客户端的无效证书
2
A
回答
1
尝试了一些解决方案后,有什么最后的工作是安装自定义协议处理,并将其与特定的关联ServiceClient
:
private void configureServiceClient(ServiceClient client) {
SSLContext ctx;
try {
KeyStore truststore = KeyStore.getInstance("JKS");
truststore.load(getClass().getResourceAsStream("/truststore.jks"),
"latitude".toCharArray());
ctx = SSLContext.getInstance("SSL");
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(truststore);
ctx.init(null, tmf.getTrustManagers(), null);
} catch (Exception e) {
logger.error("Exception loading Bold trust store", e);
throw new RuntimeException(e);
}
SSLProtocolSocketFactory sslFactory = new SSLProtocolSocketFactory(ctx);
Protocol prot = new Protocol("https",
(ProtocolSocketFactory) sslFactory, 443);
client.getOptions().setProperty(HTTPConstants.CUSTOM_PROTOCOL_HANDLER,
prot);
}
到这样做的好处是它并不需要我来覆盖所有可能潜在地打破东西的道路,如果新的证书是我为我的应用程序的SSL连接ssued。如果一个新的证书颁发,这个肯定会破坏,但它只是一个连接,而不是所有的连接。
2
尝试禁用证书验证,把下面的代码你犯了一个请求调用之前 -
// Create a trust manager that does not validate certificate chains
final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception ex) {
// take action
}
+0
这实际上不适合我,但是,我确实发布了最终的结果。我明白你的建议,我不确定为什么它不适合我。 – 2013-04-01 19:56:12
+3
有趣,但是如果你设置了默认的SSL套接字工厂,那么它就不起作用了,但是如果你做了'SSLContext.setDefault(sc);',它就可以工作。 Oracle Java 1.6 – user1516873 2013-06-14 08:53:13
相关问题
- 1. SSL设置:忽略客户端证书
- 2. 忽略Axis客户端上WCF服务的认证认证
- 3. 忽略无效SSL证书
- 4. WCF客户端证书无效
- 5. 自定义验证客户端忽略无效状态
- 6. C#如何让SslStream忽略客户端证书验证
- 7. 如何忽略c#signalr客户端中的https证书警告?
- 8. 忽略使用Jersey客户端的自签名ssl证书
- 9. 如何忽略定制JMX客户端中的SSL证书
- 10. 接收SSLHandshakeException:handshake_failure尽管我的客户端忽略所有证书
- 11. 建立TLS连接时忽略分配的客户端证书
- 12. 如何用IWinHttpRequest忽略无效证书?
- 13. 如何使Restlet客户端忽略SSL证书问题
- 14. 码头http2客户端忽略自签名证书
- 15. 让serverxmlhttp忽略请求选项客户端证书
- 16. AnkhSVN的客户端忽略
- 17. 客户端证书
- 18. 客户端证书
- 19. Axis POJO客户端
- 20. 验证客户端证书
- 21. 客户端证书认证
- 22. 客户端的SSL证书
- 23. JxBrowser的客户端证书
- 24. 单声道,Web客户端和无效的SSL证书
- 25. SOAP:无效的HTTPS客户端证书路径
- 26. WCF证书身份验证仅服务(无客户端证书)
- 27. SignalR和客户端证书
- 28. Android客户端证书403
- 29. 链式客户端证书
- 30. tls客户端证书
还有一个相关的StackOverflow答案 - 也适用于我:http://stackoverflow.com/questions/10913185/ignore-certification-authentication-on-axis-client-for-wcf-service#10913791 – 2015-11-11 23:09:33