首页 > 解决方案 > JVM 参数何时评估为系统属性?

问题描述

我有一个应用程序,它开始-Djavax.net.debug=ssl,handshake但实际上并没有显示任何调试日志记录。此属性在静态块中进行评估,javax.net.ssl.SSLSocketFactory如下所示

    static {
        String s = java.security.AccessController.doPrivileged(
            new GetPropertyAction("javax.net.debug", "")).toLowerCase(
                                                            Locale.ENGLISH);
        DEBUG = s.contains("all") || s.contains("ssl");
    }

这个静态块是否有可能在 JVM arg 设置值之前评估属性值?对此的特殊之处在于,它仅Provider在类路径(以及其他关联的 jar 文件)上设置了某个特定项时发生,即 BouncyCastle FIPS 提供程序。我想知道这个库是否以某种方式引入了竞争条件,或者它完全阻止了 TLS/SSL 的调试日志记录。

我假设将其作为 JVM arg 传递将确保此属性的最早可能设置。何时对这些进行评估,这可能是竞争条件还是 bc-fips 提供程序 jar 的“功能”?

标签: javasecurityjvmbouncycastlejvm-arguments

解决方案


推荐阅读