You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过javax.net.debug配置输出PEM格式的服务器证书?

我正在排查SSL/TLS相关问题,目前在命令行添加了-Djavax.net.debug参数开启调试,若能将服务器证书以可解析读取的格式输出到日志中,将极大提升排查效率。

我尝试过如下调试配置:

-Djavax.net.debug=ssl:record:plaintext
-Djavax.net.debug=ssl:handshake:verbose:keymanager:trustmanager
-Djavax.net.debug=ssl:handshake:verbose

其中最后一项配置的输出最接近需求,日志内容如下:

10/11/2021 10:27:36    "version"            : "v3",
10/11/2021 10:27:36    "serial number"      : "I8 00 00 00 00 D2 91 BH 88 A4 10 58 00 00 02 00 04 9E 4B",
10/11/2021 10:27:36    "signature algorithm": "SHA256withRSA",
10/11/2021 10:27:36    "issuer"             : "CN=test, DC=test, DC=test, DC=com",
10/11/2021 10:27:36    "not before"         : "2021-07-23 17:38:30.000 UTC",
10/11/2021 10:27:36    "not  after"         : "2026-07-22 17:38:30.000 UTC",
10/11/2021 10:27:36    "subject"            : "CN=CNTest, OU=TIS, O=\"ACME Inc\", L=France, ST=Paris, C=EU",
10/11/2021 10:27:36    "subject public key" : "RSA",
10/11/2021 10:27:36    "extensions"         : [
...
]

上述输出已有一定参考价值,但如果能获取可读格式的服务器证书,便于将接收到的证书与服务器上实际部署的证书做比对,能进一步辅助问题排查。

我此前也尝试过使用openssl工具导出证书,但该Java应用还用到了队列服务,其使用的证书和我拿到的证书不一致,且很难通过openssl工具提取队列服务的证书。

后续我发现上述假设是错误的,实际问题是我们在clientHello阶段仅配置了1个服务器不支持的密码套件,导致握手失败,相关报错日志如下:

11/9/2021 3:24:03 PMSession ID:  {}
11/9/2021 3:24:03 PMCipher Suites: [TLS_DHE_DSS_WITH_AES_256_CBC_SHA256]
11/9/2021 3:24:03 PMCompression Methods:  { 0 }
...
READ: TLSv1.2 Alert, length = 2
RECV TLSv1.2 ALERT:  fatal, handshake_failure
called closeSocket()
handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

不过我最初的疑问仍然成立,该日志输出能力对调试工作有很高的实用价值。


内容的提问来源于stack exchange,提问作者bramdc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:39:03