【问题标题】:Disable HTTPS Certificate Validation in FIPS mode在 FIPS 模式下禁用 HTTPS 证书验证
【发布时间】:2020-10-19 00:13:42
【问题描述】:

java 中有一段代码执行 HTTPS 调用,然后忽略传入的证书验证。为此,实施了自定义信任管理器。 但是现在我们需要切换到 FIPS 模式。并且在 fips 模式下,当 SSL Socket 使用自定义信任管理器时,会收到以下异常。

FIPS 模式:只能使用 SunJSSE TrustManagers

那么有没有办法绕过 FIPS 模式下的传入证书验证?

【问题讨论】:

  • 绕过证书验证就像在当地屋顶大喊秘密一样安全。这是一件可怕的事情,而且不应该做。修复它。
  • 感谢并同意!但我需要处理现有代码。所以我需要一种方法来做到这一点。
  • 符合 FIPS 标准!有人禁用了 SSL - 您正在以明文形式发送流量。这是根本不允许的。
  • 感谢您的评论!
  • 其实我不是说发送明文,而是ssl,只是禁用传入的证书验证。如果 FIPS 允许这样做?

标签: java security ssl fips


【解决方案1】:

不允许非 SunJSSE 信任或密钥管理器的这种行为似乎特定于 Sun/Oracle JRE。不要认为这是 FIPS 合规要求。显然,启用 FIPS 和 libcurl 的 openSSL 没有此限制。

我也因此而面临问题。

我们的 Java 应用程序中发生了一些 HTTPS API 调用。这些 API 调用实际上是关于获取远程端的 CA 证书,向最终用户显示指纹和其他详细信息,当使用接受时,将此证书保存在信任存储中。从那时起,对于工作流中的后续 HTTPS 调用,将使用此信任库。

所以,从我们的应用程序获取 CA 证书的 HTTPS 调用,我使用了“全信任”信任管理器,但显然这在 FIPS 模式下是不可接受的。

我同意 FIPS 需要更严格的安全性,因此禁用证书验证不是一个好主意,也不应该在理想情况下这样做。但是像这样的特殊情况(可能是我们想要执行更多验证,例如自定义主机名验证、证书吊销状态检查等),Sun JSSE 应该有一些规定来覆盖这种 FIPS 模式行为。

很可能,我们需要在我们的自定义 SSL 上下文中实现 SSLContextSpi 和挂钩。该实现看起来与下面的 SSLContextImpl 非常相似,但可能放宽了 FIPS 限制。 (不用说,这需要谨慎使用,尤其是 FIPS。)

https://hg.openjdk.java.net/jdk8/jdk8/jdk/raw-file/687fd7c7986d/src/share/classes/sun/security/ssl/SSLContextImpl.java

【讨论】:

    【解决方案2】:

    您基本上是在询问是否可以启用特定安全级别 (FIPS),同时禁用此级别所需的一些安全性。否 - 此安全级别的重点是确保满足特定的安全要求,并且适当的证书验证是一项基本要求。

    【讨论】:

    • 非常感谢您的回答。是否有任何 FIPS 文档的参考资料,我可以在哪里得到这个?
    • @user2420079:我无法指出 FIPS 文档的特定部分。但总的来说:在没有对对等方进行适当身份验证的情况下加密通信意味着一个人实际上可能会在不知情的情况下与错误的一方交换敏感数据——这将使加密毫无意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多