2016-09-09 74 views
10

我有问题也是here。 问题是我创建了一个证书并将其添加到tomcat的密钥库中,然后我将它复制到cacerts信任库。但是,不知何故,我仍然得到这个错误。PKIX路径建设失败,但证书是在cacerts

我做了什么:

1)密钥工具-genkey -alias CAS -keyalg RSA -keystore cas.keystore -storepass的changeit

2)密钥工具-exportcert -alias CAS - 文件cas.crt -keystore cas.keystore

步骤2),因为我希望把该证书在我的tomcat密钥存储和cacerts

3)的keytool -import -alias -file中科院-keystore cas.crt “C:\ PROGRAM 文件\的Java \ jdk1.8.0_77 \ JRE \ lib \ security中\ cacerts的”

4)密钥工具-import -alias cas -file“C:\ Program Files \ Java \ jdk1.8.0_7 \ jre \ bin \ cas.crt”-keystore “D:\ portal \ apache-tomcat-8.0.3 \ conf \ portal .keystore“

因此,现在使用步骤3和4,我在我的tomcat密钥库和信任库cacerts中添加了证书。

现在,我可以列出我的信任和密钥库

使用此命令..

的keytool -list -v -keystore“C:\ PROGRAM 文件\的Java \ jdk1.8.0_77 \ JRE \ lib \ security中\ cacerts的” -alias CAS

...我得到这个:

Keystore-Kennwort eingeben: 
Aliasname: cas 
Erstellungsdatum: 09.09.2016 
Eintragstyp: trustedCertEntry 

Eigentümer: CN=xxx, OU=xxx, O=xxx, L=xxx, ST=xxx, C=xxx 
Aussteller: CN=xxx, OU=xxx, O=xxx, L=xxx, ST=xxx, C=xxx 
Seriennummer: xxx 
Gültig von: Fri Sep 09 10:40:55 CEST 2016 bis: Thu Dec 08 09:40:55 CET 2016 
Zertifikat-Fingerprints: 
     MD5: .... 
     SHA1: .... 
     SHA256: .... 
     Signaturalgorithmusname: SHA256withRSA 
     Version: 3 

Erweiterungen: 

#1: ObjectId: 2.5.29.14 Criticality=false 
SubjectKeyIdentifier [ 
KeyIdentifier [... 
] 
] 

而与此:

的keytool -list -v -keystore “d:\门户\ Apache的Tomcat的8.0.30 \的conf \ portal.keystore” -alias CAS

我得到这个:

Keystore-Kennwort eingeben: 

Keystore-Typ: JKS 
Keystore-Provider: SUN 

Keystore enthält 1 Eintrag 

Aliasname: cas 
Erstellungsdatum: 09.09.2016 
Eintragstyp: trustedCertEntry 

    Eigentümer: CN=xxx, OU=xxx, O=xxx, L=xxx, ST=xxx, C=xxx 
    Aussteller: CN=xxx, OU=xxx, O=xxx, L=xxx, ST=xxx, C=xxx 
Seriennummer: ... 
Gültig von: Fri Sep 09 10:40:55 CEST 2016 bis: Thu Dec 08 09:40:55 CET 2016 
Zertifikat-Fingerprints: 
     MD5: ... 
     SHA1: ... 
     SHA256: ... 
     Signaturalgorithmusname: SHA256withRSA 
     Version: 3 

Erweiterungen: 

#1: ObjectId: 2.5.29.14 Criticality=false 
SubjectKeyIdentifier [ 
KeyIdentifier [ 
] 

] 

如果不明确:证书(cas)是相同的。

所以我的印象是证书现在在tomcat服务器和信任库cacerts的密钥库中。但不知何故,我仍然得到这个异常,当我进入CAS服务器上我的凭据和重定向(全堆栈跟踪波纹管):

HTTP Status 500 - 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 

这些都是我的连接器在我的雄猫server.xml

<Connector port="8743" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" 
       maxThreads="150" scheme="https" keystoreFile="${catalina.base}/conf/portal.keystore" keystorePass="changeit" 
       secure="true" connectionTimeout="240000" 
       clientAuth="false" sslProtocol="TLS" allowUnsafeLegacyRenegotiation="true" /> 

    <!-- Define an AJP 1.3 Connector on port 8009 --> 
    <Connector port="8309" protocol="AJP/1.3" redirectPort="8743" /> 

是什么我的问题的可能原因?像开头提到的其他所有线程都指出OP没有将证书导入cacerts文件,但是我做到了。

完整的堆栈跟踪:

09-Sep-2016 12:05:30.146 SEVERE [http-bio-8743-exec-4] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [default] in context with path [/cas-sample] threw exception 
java.lang.RuntimeException: 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 org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:443) 
    at org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:41) 
    at org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:193) 
    at org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:204) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:279) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
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.startHandshake(SSLSocketImpl.java:1403) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) 
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1513) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 
    at org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:429) 
    ... 20 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) 
    ... 33 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:141) 
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) 
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) 
    ... 39 more 
+0

您可以更改密钥库文件位置以在连接器中使用cas.keystore吗? – Veeram

回答

2

我的问题是相当意外的。我有一个修改过的setenv.bat的Tomcat,其中有选项指向密钥库的另一个位置。我对Tomcat和应用程序服务器一般了解不多,因此我不能在早些时候弄清楚。

2

Connector元素定义一个密钥。这是一个私人钥匙和他们的证书将被查找的地方。

您的例外涉及信任库,这是一个可信CA证书找不到的地方。

您需要通过配置或通过javax.net.ssl.trustStore系统属性以某种方式定义Tomcat使用的信任库。

+0

我已经两次都没有,没有工作。 – Goldi

+0

如何检查javax.net.ssl.trustStore的值是多少 – Goldi

+0

您的配置是否正确。看到我的答案... – Goldi

2

您可以导航到tomcat/bin目录。修改catalina.sh(或catalina.bat取决于你的操作系统)。

将以下属性添加到JAVA_OPTS。

JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=$CATALINA_HOME/certificates/truststore.ks -Djavax.net.ssl.trustStorePassword=truststorePassword -server" 

我最近不得不通过一些truststore/keystore问题自己。我发现对于轻松查看/修改信任/密钥库非常有用的工具是keystore explorer

+0

“信任问题”让我轻笑 –

相关问题