我的印象是,一旦我在获取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();
我认为在answer = SSLContext.getDefault();
即将执行时,SSLContext相关的类已经加载。我通过放置解决了这个问题
System.setProperty("javax.net.ssl.keyStore", "/valida-location/keyStore.jks");
System.setProperty("javax.net.ssl.keyStorePassword","changeit");
在我班的静态块中。这样,在类加载时就设置了一些属性。感谢@dave_thompson_085的提示。