首页 > 解决方案 > 以管理员身份执行 Glassfish 5.1 时出现 Java 安全错误,但证书有效

问题描述

我正在尝试在 Glassfish 5.1.0 中部署 Oracle ORDS 19.1 战争文件。

我遇到了部署错误,我想我已经找到了解决方案。

但是,当我尝试运行修复程序时,我收到另一个错误,这对我来说没有任何意义。在 Glassfish 5.1.0 下:

[oracle@secure-web-server-dvl glassfish]$ bin/asadmin set configs.config.server-config.cdi-service.enable-implicit-cdi=false
NCLS-ADMIN-00010
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateExpiredException: NotAfter: Tue Apr 03 18:09:20 EDT 2018
Command set failed.

这是 SSL 证书过期错误。但是,我的证书没有过期。

我使用 keytool 检查 cacerts.jks 和 keystore.jks 中所有证书的有效性。

一切都是有效的。有人可以在这里解释真正的问题吗?

帮助!

标签: glassfishssl-certificate

解决方案


  • 更新:

你是如何运行keytool的?默认列表(没有 -v 表示详细)为您提供证书有效的日期,直到!),尝试添加 -v 或使用替代工具,如:https ://keystore-explorer.org/

  • 原帖:

如果无法访问您的环境或任何重现此问题的步骤,我无法为您提供简单的修复 - 抱歉。遗憾的是,这个特定异常没有显示堆栈跟踪来告诉我们更多是哪些代码导致它,或者调试日志记录告诉我们是哪个 url/连接尝试导致了这种情况。

寻找这个特定的证书到期日期只会在其他地方显示完全相同的问题(交叉发布):

因此,我希望您的问题特定于您的本地环境,例如:

  • (透明代理服务器/负载平衡器/前端网络服务器)证书过期,或将请求重定向到与预期不同的 IP 地址
  • ldap 服务器通过具有过期证书的 ssl/tls 处理的身份验证
  • 自定义密钥库配置指向与您预期不同的密钥库文件(很可能带有扩展名:jks、pkcs12/p12/pfx、cer,或取决于您的 java 安全提供程序和相关配置(对于 Oracle Java,它甚至可能在 Windows密钥库等,请参阅: https ://docs.oracle.com/en/java/javase/11/security/oracle-providers.html )

尝试:

  • 使用系统属性运行涉及的 Java(客户端)应用程序:javax.net.debug=all,例如使用 java -Djavax.net.debug=all ... some.jar/someclass
  • 如果您想使用其他工具进行检查,请尝试使用:
    • openssl s_client -connect 主机:端口 -servername 主机 -showcerts
    • 将您在上述输出中看到的所有证书保存到 cert.txt 之类的文件中,并使用以下命令检查它们:
    • openssl x509 -in cert.txt -noout -text
  • 如果您绝望,风险自负,将您的系统日期/时间暂时更改为到期日期/时间之前,首先制作系统快照/备份 - 以防万一:-)

如果一切都失败了:

  • 拦截与网络相关的系统调用(例如,在 unix 上使用 strace 或在 Windows 上使用 procmon)
  • 拦截流量(例如使用tcpdump、wireshark等)并使用wireshark进行分析
  • 连接一个 Java 调试器并在 java.security.cert.CertificateExpiredException 上放置一个断点

祝你好运!


推荐阅读