【问题标题】:Setting up keystore programmatically before getting default SSL context在获取默认 SSL 上下文之前以编程方式设置密钥库
【发布时间】:2019-04-13 11:57:15
【问题描述】:

我的印象是,一旦我设置了系统属性,当我获得 SSLContext.getDefault() 时,应该返回带有这些设置属性的 SSLContext。在以下情况下应使用指定的keyStore。不幸的是,事实并非如此。它回退了 JVM 的默认密钥库。我错过了什么吗?

            System.setProperty("javax.net.ssl.keyStore", "/valida-location/keyStore.jks");
            System.setProperty("javax.net.ssl.keyStorePassword","changeit");
            System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");

            answer = SSLContext.getDefault();

【问题讨论】:

  • 当您使用-Djavax.net.debug=ssl' 运行时,您会在日志中得到什么?它是否显示它读取/keyStore.jks
  • keyStore is : keyStore type is : jks keyStore provider is : init keystore init keymanager of type SunX509 trigger seeding of SecureRandom done seeding SecureRandom Allow unsafe renegotiation: false Allow legacy hello messages: true 这是我在日志中得到的@KarolDowbecki
  • 您可以使用-D 属性而不是System.setProperty() 重新运行吗?我正在尝试确认您的密钥库位置和密码是否正确。
  • (1) 此代码是否在您的 JVM 进程中的任何代码对任何与 SSL 相关的类的任何其他引用之前执行? (一定是。) (2) /keyStore.jks 真的在系统的根目录中吗(或者在 Windows 上是驱动器的根目录)?
  • @dave_thompson_085 请看我的回答。尽管我尝试将这两个属性放在我的构造函数中,但这也为时已晚。所以,最后,把它放在一个静态块中。感谢您的提示。

标签: java security java-security java-security-manager


【解决方案1】:

我认为当answer = SSLContext.getDefault(); 即将执行时,SSLContext 相关类已经加载。我把它解决了

System.setProperty("javax.net.ssl.keyStore", "/valida-location/keyStore.jks"); System.setProperty("javax.net.ssl.keyStorePassword","changeit"); 在我班级的静态块中。这样,在类加载时就设置了属性。感谢@dave_thompson_085 的提示。

【讨论】:

    猜你喜欢
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2010-10-23
    相关资源
    最近更新 更多