java - 如何在 TrustManager 的 checkServerTrusted() 中获取 CertPathValidatorResult?

标签 java ssl x509certificate jsse httpsurlconnection

当调用实现 X509TrustManager 类的 checkServerTrusted 方法时,我需要获取与证书链相关的所有验证错误,包括

  1. 证书路径验证问题。例如 CA 不受信任
  2. 证书字段验证问题。例如证书过期,扩展 key 使用无效

这背后的动机是,在用户将其添加为“异常(exception)”之前,我可以向用户展示证书验证问题,就像 Firefox 现在所做的那样。但是,现在,一旦发现路径验证问题,就会抛出 CertPathValidatorException,但它没有提供有关证书中字段有效性的任何信息。我该如何实现?

经过一些阅读,我发现 CertPath API 提供了这样的功能,并且发现 PKIX 实现是对此的包装,但只是不返回 CertPathValidatorResult。我想在返回所有验证问题时最大限度地利用现有的 JAVA 功能(无需将我自己的自定义包装器写入 API)。

最佳答案

如果出现证书错误,您甚至无法访问 X509TrustManager.checkServerTrusted()。您需要在较早的时候 Hook 证书处理,我认为 JSSE 中没有。

关于java - 如何在 TrustManager 的 checkServerTrusted() 中获取 CertPathValidatorResult?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17663870/

相关文章:

java - 使用自行生成的证书识别用户

c# - 如何判断 X.509 证书是否可导出?

用于获取括号中数字之间的文本的 Java 正则表达式模式

java - 当 Activity 被破坏时保存切换按钮的值,并在 Activity 再次启动时将它们放回原处

javascript - 使用浏览器的证书(私钥)在javascript中签署一些字符串

iis - Azure mod-rewrite to SSL 不起作用

java - 安卓系统证书

java - 使用 SAX 字符方法从 XML 元素解析 PCDATA

java - 使用 Tomcat 运行 Servlet

python - 调用 JenkinsAPI(https) 挂起