Tomcat 不会从具有自签名证书的服务器下载文件

标签 tomcat ssl self-signed shibboleth

我有一个(远程)tomcat 服务器 (idp.mydomain.com),我在其中部署了 Shibboleth IDP。使用自签名证书通过 SSL 保护通信。如果我向浏览器添加异常(exception),我可以访问元数据配置 XML。

在第二个(本地)tomcat (sp.localhost.mydomain.com) 上,我有一个 spring 应用程序,它使用 SAML 对我的 IDP 进行身份验证。但是,启动 SP 时出现以下证书错误:

    Caused by: 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
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
    at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:747)
    at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
    at org.apache.commons.httpclient.HttpConnection.flushRequestOutputStream(HttpConnection.java:828)
    at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2116)
    at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
    at org.opensaml.saml2.metadata.provider.HTTPMetadataProvider.fetchMetadata(HTTPMetadataProvider.java:250)
    ... 30 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387)
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
    at sun.security.validator.Validator.validate(Validator.java:260)
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491)
    ... 47 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:146)
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131)
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382)
    ... 53 more

如果我反对具有有效证书的服务器,它会起作用,但是我如何才能说服我顽固的 tomcat 也接受自签名证书呢?

最佳答案

您需要创建 JKS 信任库并包含自签名证书的公共(public)部分。然后,SSL 连接将接受服务器证书

启动tomcat
-Djavax.net.ssl.trustStore=/path/to/truststore.jks 
-Djavax.net.ssl.trustStorePassword=truststorePassword

参见 add jvm options in tomcat

关于Tomcat 不会从具有自签名证书的服务器下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41697621/

相关文章:

java - 如何发布我自己的类型化 WSDL?

google-maps - 运行 https 的站点的 map 控件

Android kSOAP2 SSL 自签名证书 "Security Requirements not met - No Security header in message"

spring - 部署 Spring 4 应用程序的优点/缺点

java - Tomcat启动时如何创建Java类?

ssl - 如何在 openssl 命令行中传递自定义证书

sockets - Erlang:使用 sockets/gen_tcp 连接到 API

asp.net - 如何导出 "IIS Express Development Certificate"到另一台电脑通过https连接本地IIS?

java - 没有任何改变,但出现 "peer not authenticated"错误

Eclipse 3.4 + Tomcat 6.0 + 使用控制台输出进行远程调试