我有一个在 a 上运行的单页 Web 应用程序(Spring MCV + JSF(primefaces) + tomca 8)Development-server
,它调用 API 来从提供者(例如https://stream.xyz.com)获取数据,起初我有SSLHandshakeException:
javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径
经过一番研究,我发现问题是什么,我通过导出域证书并/jdk/jdk1.8.0_65/jre/lib/security/cacerts
通过一些命令手动添加它来解决它,然后我的问题就解决了。
但主要问题:
我有一个on production-server it has SSL enabled, I mean that in /resources folder I have a SSLKeystore.p12
包含我的证书的 SpringBoot(v 1.5.12) 应用程序,但是当我运行它on development-server(which mentioned webApp exists) SSL configs have been commented
并且它再次想要对同一个域进行 API 调用时,我面临着SSLHandshakeException
上述问题。
springBoot 是否不使用cacerts
我在其中添加域证书的文件?
任何有关如何解决此问题的想法将不胜感激!
更新:
经过一些研究,我在项目中添加了这个配置类:
@Configuration
@PropertySource(value = "classpath:SSLConfigs.properties", encoding = "UTF-8")
public class SSLConfig {
@Autowired
private Environment env;
@PostConstruct
private void configureSSL() {
//set to TLSv1.1 or TLSv1.2
System.setProperty("https.protocols", "TLSv1.1");
//load the 'javax.net.ssl.trustStore' and
//'javax.net.ssl.trustStorePassword' from application.properties
System.setProperty("javax.net.ssl.trustStore", env.getProperty("server.ssl.trust-store"));
System.setProperty("javax.net.ssl.trustStorePassword",env.getProperty("server.ssl.trust-store-password"));
}
}
还有这些在属性文件中:
server.ssl.trust-store=classpath:classpath:SSLKeystore.p12
server.ssl.trust-store-password=password
现在我面临这个例外:
原因:java.lang.RuntimeException:意外错误:java.security.InvalidAlgorithmParameterException:在 sun.security.validator.PKIXValidator.(PKIXValidator.java:90) 的 sun.security.validator.Validator 的 trustAnchors 参数必须非空.getInstance(Validator.java:179) 在 sun.security.ssl.X509TrustManagerImpl.getValidator(X509TrustManagerImpl.java:312) 在 sun.security.ssl.X509TrustManagerImpl.checkTrustedInit(X509TrustManagerImpl.java:171) 在 sun.security.ssl。 x509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:184) 在 sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) 在 sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491) 在 sun.security.ssl .ClientHandshaker.processMessage(ClientHandshaker.java:216) 在 sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) 在 sun.security.ssl.Handshaker.process_record(Handshaker.java:914) 在 sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) 在 sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java :1375) 在 sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) ... 144 更多原因:java.security.InvalidAlgorithmParameterException:在 java.security.cert.PKIXParameters 的 trustAnchors 参数必须为非空.setTrustAnchors(PKIXParameters.java:200) 在 java.security.cert.PKIXParameters.(PKIXParameters.java:120) 在 java.security.cert.PKIXBuilderParameters.(PKIXBuilderParameters.java:104) 在 sun.security.validator.PKIXValidator。 (PKIXValidator.java:88)SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) ... 144 更多原因:java.security.InvalidAlgorithmParameterException:trustAnchors 参数必须在java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:200) 在 java.security.cert.PKIXParameters.(PKIXParameters.java:120) 在 java.security.cert.PKIXBuilderParameters.(PKIXBuilderParameters.java:104) 在 sun .security.validator.PKIXValidator.(PKIXValidator.java:88)SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) ... 144 更多原因:java.security.InvalidAlgorithmParameterException:trustAnchors 参数必须在java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:200) 在 java.security.cert.PKIXParameters.(PKIXParameters.java:120) 在 java.security.cert.PKIXBuilderParameters.(PKIXBuilderParameters.java:104) 在 sun .security.validator.PKIXValidator.(PKIXValidator.java:88)java:200) 在 java.security.cert.PKIXParameters.(PKIXParameters.java:120) 在 java.security.cert.PKIXBuilderParameters.(PKIXBuilderParameters.java:104) 在 sun.security.validator.PKIXValidator.(PKIXValidator.java: 88)java:200) 在 java.security.cert.PKIXParameters.(PKIXParameters.java:120) 在 java.security.cert.PKIXBuilderParameters.(PKIXBuilderParameters.java:104) 在 sun.security.validator.PKIXValidator.(PKIXValidator.java: 88)