【发布时间】:2015-09-19 19:41:09
【问题描述】:
有一个受证书保护的网络服务。在调用它的客户端代码中,证书的 CA 必须存在于信任库 (JRE_path\lib\security\cacerts) 中 - 如果没有,您会在客户端获得 PKIX 异常。
如果证书过期会发生什么 - 客户端代码失败。
但是,可以通过将证书直接添加到信任库中来绕过这一点 - Trusting an expired certificate
即如果证书本身而不是 CA 存在于信任库中,那么即使证书已过期,一切正常。
在我的场景中,网络服务证书是自签名的,所以无论如何我都必须将它添加到信任库中,即使证书已过期,客户端也能继续正常工作。
现在我的问题是这是否适用于所有场景 - 我的程序只是一个运行本地 JRE 的命令行程序。
如果有应用程序调用 web 服务并且应用程序在 Websphere、JBoss、WebLogic、Tomcat、Glassfish 等上运行,并且自签名证书被添加到该环境的信任库中,我仍然可以假设它将继续工作(不给出过期错误)?
我认为它会起作用 - 因为那些应用程序服务器也会像任何程序一样使用 JRE - 还是我遗漏了什么?
【问题讨论】:
-
如果您不希望它安全,请不要使用 HTTPS。如果您确实希望它安全,请不要尝试挑选您自己的安全功能。
-
就像@EJP 所说:削弱安全性通常不是一个好主意。但作为程序员,我们通常也必须防止应用程序静默失败。因此,您应该确保如果程序失败,任何调查此问题的管理员都会清楚原因,或者您可以尝试捕获过期证书发生的异常或从代码内部强制接受哪些证书:stackoverflow.com/questions/6659360/…
-
如果您的环境中有 openssl 命令(安装它)。您可以将其用作带有date check 的后台cmd 后台应用程序并读取结果
-
@AliHelmy 这有什么帮助?
标签: java web-services pki truststore appserver