use*_*353 11 java web-services pki truststore appserver
有一个受证书保护的Web服务.在调用它的客户端代码中,证书的CA必须存在于信任库(JRE_path\lib\security\cacerts)中 - 如果不存在,则在客户端获得PKIX异常.
如果证书已过期会发生什么 - 客户端代码失败.
但是,可以通过将证书直接添加到信任库来绕过这一点 - 信任过期的证书
即如果证书本身而不是CA存在于信任库中,那么即使证书已过期,一切都可以正常工作.
在我的场景中,webservice证书是一个自签名证书,所以我无论如何都必须将它添加到信任库,即使证书已过期,客户端也能继续正常工作.
现在我的问题是这将在所有场景中工作 - 我的程序只是一个运行本地JRE的命令行程序.
如果有一个应用程序调用webservice并且应用程序在Websphere,JBoss,WebLogic,Tomcat,Glassfish等上运行,并且自签名证书被添加到该环境的信任库中,我是否还可以认为它将继续工作(不是给出过期的错误)?
我认为它会起作用 - 因为那些应用程序服务器也会像任何程序一样使用JRE - 或者我错过了什么?
您可以通过以下代码绕过所有证书
try {
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
}
} };
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
SSLContext.setDefault(sc);
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
LOGGER.debug("All Certificates Have Been Trusted Successfully.");
} catch (KeyManagementException ex) {
LOGGER.error("Error:",ex);
} catch (NoSuchAlgorithmException ex) {
LOGGER.error("Error:",ex);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2982 次 |
| 最近记录: |