簡體   English   中英

SSLHandshakeException-使用自簽名證書從Web應用程序調用Web服務

[英]SSLHandshakeException - Calling webservice from web application using self signed certificate

我的Web應用程序和Web服務在同一個tomcat容器中運行。 如果我不使用HTTPS,則一切正常。
當我同時在HTTPS上運行Web應用程序和Web服務時,當Web應用程序嘗試調用WebServices時,出現SSLHandshakeException。

情況1

我使用以下命令創建了本地自簽名證書文件

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

在文件夾C:\\apps創建了一個名為test1.crt的證書文件。

現在,我想使用以下命令在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" />

服務器啟動時沒有出現任何錯誤。 當我從應用程序調用webservices時,我收到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

在文件夾C:\\apps創建了一個名為test2.crt的證書文件。

當我在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/ } stackTrace:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路徑構建失敗:sun.security.provider.certpath.SunCertPathBuilderException:找不到到請求目標的有效認證路徑

我認為對於Tomcat,keystoreFile是“%JAVA_HOME%/ jre / lib / security / cacerts”,而您不必指出任何密鑰庫,因為您已在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM