【发布时间】: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