清除Java证书caching(强制重载证书)

这里有个简单的问题。

当一个应用程序尝试访问具有过期证书的网站时,给了我这个例外: java.security.cert.CertificateExpiredException

所以,我重新从网站机器authentication,并重新启动它。 当我尝试从Firefox或Chrome访问它时,它将加载新的证书(到期date设置在2040附近)。

问题是,Java应用程序似乎没有更新这个证书,它似乎被卡在某种内部caching中。 我已经尝试将其添加到keystore并在应用程序属性中设置选项,如-Dcom.sun.net.ssl.checkRevocation=false 。 不pipe我做什么,它总是抛出一个java.security.cert.CertificateExpiredException

有任何想法吗?

默认的Java密钥库位置是您的主目录(user.home系统属性)下的.keystore文件,所以除非您另外指定了Java应用程序的外观。

尝试运行:

 $ keytool -list -keystore ~/.keystore -storepass changeit -v 

看看过期的证书是否在那里。

如果你想指定一个不同的标识密钥库来使用,那么你可以使用下面的系统属性来完成:

 javax.net.ssl.Keystore=/path/to/identity.jks javax.net.ssl.keyStorePassword=mykeystorepassword 

我相信Firefox使用NSS,您可以使用certutil工具(来自nss-tools或类似的软件包)查看其密钥库,如下所示:

 $ certutil -L -d sql:$HOME/.pki/nssdb 

您应该可以使用pk12util实用程序将密钥和证书提取到PKCS12文件中,但是最好使用keytool实用程序生成新的证书签名请求。

请注意,撤销的证书是不相同的,这就是为什么你的checkRevocation = false不起作用。 即使CA尚未过期,CA也可以随时撤消证书,这表明不应再信任该证书。