如何在Java中忽略对等证书过期?

问题描述 投票:0回答:1

我正在开发一个 Java 产品,它使用 sun.security.validator.Validator 的 validate() 方法来验证对等方的 TLS 证书链。有些同行的证书已过期。如果用户选择,产品必须忽略过期错误。我可以捕获 CertificateExpiredException 并忽略它。但我不确定这是否是 validate() 方法中的最后一次检查,以及在遇到过期证书之前是否通过了其他检查。以这种方式忽略证书过期是否安全?有更好的方法来实现吗?

java x509certificate x509trustmanager
1个回答
0
投票

验证只有两个结果:有效无效。因此,有效但已过期不是验证者期望的结果。

因此

sun.security.validator.Validator
可能不是您想要使用的类,特别是如果您必须依赖它的实现细节。这可能会导致 Java 的未来版本出现问题。

您可以复制它的源代码(或者如果足够的话,可以复制

SimpleValidator
之一)并根据您的需要进行修改。 或者,当您检查源代码时,您会发现代码签名变体不会检查到期日期。但是,尽管使用
Validator
的变体很诱人,但要小心,它也可能会产生其他副作用!

也许更好的选择是提供 Validator

variants
作为用户的选择,并具有所有含义。

来自

Validator
的 JavaDoc:

变体控制额外的扩展检查。目前支持五种变体:

  • VAR_GENERIC(无需额外检查),
  • VAR_TLS_CLIENT(TLS 客户端特定检查)
  • VAR_TLS_SERVER(TLS 服务器特定检查),以及
  • VAR_CODE_SIGNING(代码签名特定检查)。
  • VAR_JCE_SIGNING(JCE 代码签名特定检查)。
  • VAR_TSA_SERVER(TSA 服务器特定检查)。
  • VAR_PLUGIN_CODE_SIGNING(插件/WebStart 代码签名特定检查)。

(注意数字五与列表实际长度的差异是部分来源)

© www.soinside.com 2019 - 2024. All rights reserved.