在 FIPS 模式下禁用 HTTPS 证书验证



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

FIPS 模式:只能使用 SunJSSE TrustManagers

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

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

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

我也因此面临问题。

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

因此,从我们的应用程序调用HTTPS以获取CA证书,我使用了"全部信任"信任管理器,但显然这在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

相关内容

  • 没有找到相关文章

最新更新