本文介紹了啟用Java以允許過期證書的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
是否有使Java能夠允許過期證書的命令行標(biāo)志?
目前我收到以下異常,因?yàn)樽C書已過期。
Caused by: java.security.cert.CertificateExpiredException: NotAfter: {PAST DATETIME}
at sun.security.x509.CertificateValidity.valid(CertificateValidity.java:274)
at sun.security.x509.X509CertImpl.checkValidity(X509CertImpl.java:629)
at sun.security.x509.X509CertImpl.checkValidity(X509CertImpl.java:602)
at org.apache.ws.security.validate.SignatureTrustValidator.validateCertificates(SignatureTrustValidator.java:103)
我嘗試了以下命令行標(biāo)志,它不會(huì)忽略證書過期檢查
-Dcom.sun.net.ssl.checkRevocation=false
我們的應(yīng)用程序在路徑/myapplication
下的Tomcat中運(yùn)行。因此,我創(chuàng)建了另一個(gè)應(yīng)用程序/ignorecertificate
,并將其部署在同一個(gè)Tomcat的Webapp文件夾中。根據(jù)此question中接受的答案,我在啟動(dòng)/ignoreexpired
應(yīng)用程序時(shí)運(yùn)行以下代碼。
// Create a trust manager that does not validate certificate chains
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) {
}
}
};
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
e.printStackTrace();
}
因?yàn)閮蓚€(gè)應(yīng)用程序都部署在同一個(gè)Tomcat中,所以我預(yù)計(jì)/myapplication
會(huì)忽略證書過期檢查/異常(因?yàn)檫@兩個(gè)應(yīng)用程序共享相同的Java實(shí)例)。但它仍然不起作用。我在另一個(gè)應(yīng)用程序(/ignoreexpired
)中運(yùn)行此忽略代碼是因?yàn)槲也幌朐诋?dāng)前應(yīng)用程序(/myapplication
)中進(jìn)行任何更改。
推薦答案
-Dcom.sun.net.ssl.checkRevocation=false
此選項(xiàng)(帶有一些附加配置)允許證書頒發(fā)者在線檢查證書的吊銷狀態(tài)。不是您要找的。
由于兩個(gè)應(yīng)用程序都部署在同一Tomcat中,我預(yù)計(jì)/myapp會(huì)忽略證書過期檢查/異常
應(yīng)用程序在不同的JVM上下文中運(yùn)行。/ignoreexpired
應(yīng)用程序的TrustManager
中的更改不會(huì)影響另一個(gè)應(yīng)用程序。
您可以將過期的證書包含在JVM使用的信任存儲(chǔ)中。我認(rèn)為TrustoreManager
不會(huì)檢查信任存儲(chǔ)中明確包含的證書的過期時(shí)間。使用KeyTool或圖形用戶界面KeyStore explorer創(chuàng)建JK,插入證書(最終證書,而不是根證書),并通過
在Tomcat中全局使用它
-Djavax.net.ssl.trustStore=/path/to/truststore
-Djavax.net.ssl.trustStorePassword=truststorepassword
您還可以在jre/lib/security/cacerts
更新默認(rèn)JVM信任存儲(chǔ)
這篇關(guān)于啟用Java以允許過期證書的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,