我有一个需要客户端证书的web服务,我在运行时使用以下代码加载:
System.setProperty("javax.net.ssl.keyStore", keystore.getAbsolutePath());
System.setProperty("javax.net.ssl.keyStorePassword", "password");
System.setProperty("javax.net.ssl.keyStoreType", "jks");
System.setProperty("javax.net.ssl.trustStore", cafile.getAbsolutePath());
System.setProperty("javax.net.ssl.trustStorePassword", "password");
但是,现在我通过常规https(没有任何客户端证书)连接的其他Web服务被破坏了:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
有没有办法在运行时加载证书而不破坏现有的https webservice?
答案 0 :(得分:0)
我尝试了这个长期以来类似的问题,并且正在努力。
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
Security.addProvider (new com.sun.net.ssl.internal.ssl.Provider());
System.setProperty("https.protocols", "SSLv3,TLSv1");
System.setProperty("javax.net.ssl.trustStore", "");
System.setProperty("javax.net.ssl.trustStorePassword", "");
System.setProperty("javax.net.ssl.trustStoreType", "");
Security.ssl.allowUnsafeRenegotiation", "true");
System.setProperty("javax.net.ssl.keyStore", "");
System.setProperty("javax.net.ssl.keyStorePassword", "");
System.setProperty("javax.net.ssl.keyStoreType", "");
System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
通过在您正在使用的应用程序服务器中配置trustore
和keystore
,也可以实现相同的目的。
问题是证书未正确导入。 我希望以下链接可以帮助你。