出现SSLHandshakeException - 使用自签名证书从调用的Web应用程序Web服务

问题描述 投票:0回答:1

我的Web应用程序和Web服务在同一个Tomcat容器运行。如果我不使用HTTPS,一切工作正常。 当我运行Web应用程序和Web服务都使用HTTPS,但我得到当Web应用程序试图调用Web服务出现SSLHandshakeException。

情况1

我创建了使用以下命令在本地自签名的证书文件

%JAVA_HOME%\bin\keytool -genkeypair -alias test1 -keyalg RSA -keystore c:/apps/test1.crt

一个名为test1.crt证书文件夹中C:\apps被创建。

现在,我想在Java密钥库导入该证书,用下面的命令

%JAVA_HOME%\bin\keytool -import -alias test1 -file c:/apps/test1.crt-keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit

我收到以下错误 -

关键工具错误:java.lang.Exception的:该项目不是一个X.509证书

当我使用Tomcat中这个证书文件,下面的设置

<Connector port="8443"
    maxHttpHeaderSize="8192"
    maxThreads="150"
    minSpareThreads="25"
    maxSpareThreads="75"
    enableLookups="false"
    disableUploadTimeout="true"
    acceptCount="100"
    scheme="https"
    secure="true"
    clientAuth="false"
    sslProtocol="TLS"
    SSLEnabled="true"
    URIEncoding="UTF-8" 
    keystorePass="changeit" 
    keystoreFile="C:/apps/test2.crt" />

我不是在服务器启动时得到任何错误。当我调用web服务与应用程序,我得到SSLHandshakeException

案例2

我已经加入了Java密钥存储在本地的自签名证书,下面的命令

%JAVA_HOME%/bin/keytool -genkeypair -alias test2 -keyalg RSA -validity 1000 -keysize 2048 -keystore %JAVA_HOME%/jre/lib/security/cacerts

证书已被添加,这是我下面的命令验证

JAVA_HOME%\bin\keytool -list -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit

现在,我已出口从Java密钥库证书文件,下面的命令

%JAVA_HOME%/bin/keytool -export -alias test2 -keystore %JAVA_HOME%/jre/lib/security/cacerts -rfc -file C:/apps/test2.crt

一个名为test2.crt证书文件夹中C:\apps被创建。

当我使用Tomcat中这个证书文件,下面的设置

<Connector port="8443"
    maxHttpHeaderSize="8192"
    maxThreads="150"
    minSpareThreads="25"
    maxSpareThreads="75"
    enableLookups="false"
    disableUploadTimeout="true"
    acceptCount="100"
    scheme="https"
    secure="true"
    clientAuth="false"
    sslProtocol="TLS"
    SSLEnabled="true"
    URIEncoding="UTF-8" 
    keystorePass="changeit" 
    keystoreFile="C:/apps/test2.crt" />

我提示以下错误:

在org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:491) java.lang.IllegalArgumentException异常:无效的密钥库格式所造成 在org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:114) 在org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:85) 在org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:224) 在org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1044) 在org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:540) 在org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:74) 在org.apache.catalina.connector.Connector.initInternal(Connector.java:932) ... 13个

java.io.IOException异常:无效的密钥库格式所造成 在sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:663) 在sun.security.provider.JavaKeyStore $ JKS.engineLoad(JavaKeyStore.java:56) 在sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224) 在sun.security.provider.JavaKeyStore $ DualFormatJKS.engineLoad(JavaKeyStore.java:70) 在java.security.KeyStore.load(KeyStore.java:1445) 在org.apache.tomcat.util.net.SSLUtilBase.getStore(SSLUtilBase.java:160)

虽然服务器开始,我可以用我的应用程序。但是,当我试图调用Web服务,我得到

这里是出现SSLHandshakeException的日志

嵌套的例外是: javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径建设失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效的认证路径请求的目标

错误:(org.apache.axis.AxisFault) - > [;嵌套的例外是: javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径建设失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效的认证路径请求的目标]

AxisFault 的faultcode:{http://schemas.xmlsoap.org/soap/envelope/} Server.userException faultSubcode: faultString:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径建设失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效的认证路径请求的目标 faultActor: faultNode: faultDetail: {} http://xml.apache.org/axis/堆栈跟踪:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径建设失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效的认证路径请求的目标

java web-services ssl axis2
1个回答
0
投票

我想为Tomcat的keystoreFile是“%JAVA_HOME%/ JRE / lib / security中/ cacerts的”和而你没有表示任何密钥库becouse你加一个密钥到JRE共同密钥库,但它恰恰不正确使用“C: /apps/test2.crt”。

也尝试将服务器证书添加到信任库文件:

 JAVA_HOME%\bin\keytool -import -v -trustcacerts -alias test2 -file C:/apps/test2.crt -keystore  %JAVA_HOME%/jre/lib/security/cacerts -keypass changeit -storepass changeit
© www.soinside.com 2019 - 2024. All rights reserved.