【问题标题】:Is there a practical way to determine which JCE crypto providers are in use?是否有一种实用的方法来确定正在使用哪些 JCE 加密提供者?
【发布时间】:2011-05-23 18:53:48
【问题描述】:

我们已将 Java 产品配置为仅使用经过 FIPS 验证的 RSA JCE 加密提供程序。但是,当 RSA 库在 java.security 中列出时,该产品将无法工作。因此,有些东西正在向其他提供商请求非 FIPS 算法。

通过消除过程,我们可以知道哪些 jar 是成功操作所必需的,但这并不能告诉我们正在请求哪些算法,或者由谁请求。

这似乎是一个常见问题,但显然我们没有偶然发现正确的文档或 Google 搜索字符串:是否有任何可靠、方便和一致的机制来确定哪些 JCE 提供程序被用于正在运行 JVM 实例?

【问题讨论】:

    标签: java cryptography rsa provider jce


    【解决方案1】:

    【讨论】:

    • 谢谢布鲁诺。拥有此列表很有帮助,但我仍然无法确定哪些客户端在运行时从哪些提供者接收哪些算法。该产品只需要使用 FIPS 认证的算法运行,或者如果这不可能,我们必须能够解释/证明哪些客户端不是,以及为什么不。到目前为止,我们还没有找到获取该信息的方法。
    • 不知道 tbh,保存在运行时检测代码,这似乎是一个非常钝器。
    【解决方案2】:

    我建议你实现自己的ClassLoader,并让它记录调试信息。

    不过,我不确定这是否会让您了解加载 FooJCEProvider 的每个类,而不仅仅是加载 FooJCEProvider 的第一个类。

    或者,您是否尝试过使用jconsole? "类加载MBean也有Verbose属性,可以设置开启或关闭类加载详细跟踪"

    【讨论】:

    • 当您提到 ClassLoader 时,我瞬间振作起来,但正如您所指出的,它也可能存在一些缺点。我想我还是会进一步调查,看看实际行为是什么。
    【解决方案3】:

    正如 Bruno 所说,您可以遍历所有提供程序。

    在运行时,您可以使用 getProvider 方法检查您的 Cipher 使用的提供程序。

    【讨论】:

    • 也许我在原始帖子中不够清楚...这是第三方产品,我们需要对其进行配置以使用 FIPS 验证的提供程序 (RSA) .由于在 JRE 中安装 only RSA 时产品无法正常运行,因此我们正在尝试确定哪些功能/组件正在使用非 FIPS 提供程序。这必须从一个相当复杂的产品“外部”完成,其中包括服务/守护进程,以及基于 Eclipse 和基于浏览器的 GUI 元素。我们最初创建自己的 JCE 提供程序以“挂钩”加密引擎请求的尝试没有成功。
    【解决方案4】:

    System.setProperty("javax.net.debug","all") 有没有给你任何有用的东西?

    【讨论】:

    • 感谢 Dave,但不,这似乎没有提供我们正在寻找的信息(我们使用的不仅仅是 SSL/TLS)。我想,我们真正要寻找的是 JCE 中的一个“钩子”,它会给我们一个堆栈跟踪(或其他东西),表明哪些密码被分配了两个什么(或谁)。 JCE 架构似乎不支持这种行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2021-11-11
    相关资源
    最近更新 更多