簡體   English   中英

Web服務客戶端身份驗證導致Tomcat中的異常

[英]Web Service Client authentication leading to exception in Tomcat

我是基於Https / SSL的配置的新手,正在嘗試調用啟用了客戶端身份驗證的簡單計算器Web服務。 以下是我的tomcat(1)的server.xml中的連接器條目

   <Connector clientAuth="true" port="8443" minSpareThreads="5" maxSpareThreads="75"
   enableLookups="true" disableUploadTimeout="true"
   acceptCount="100" maxThreads="200"
   scheme="https" secure="true" SSLEnabled="true"
   keystoreFile="C:\cert\server.jks"
   keystoreType="JKS" keystorePass="password"
   truststoreFile="C:\cert\server.jks"
   truststoreType="JKS" truststorePass="password"
   SSLVerifyClient="require" SSLEngine="on" SSLVerifyDepth="2" sslProtocol="TLS"
   keyAlias="servercert"
/>

我正在使用MyEclipse生成的客戶端來執行此操作(在啟用SSL之前生成,然后將wsdl url更改為指向新的HTTPS連接)。我使用的WSDL url是:

https://localhost:8443/MyService/CalculatorPort?wsdl

我將這個客戶端托管在另一個tomcat(2)中。 這是tomcat(2)的server.xml條目:

<Connector port="8444" protocol="HTTP/1.1" SSLEnabled="true"
       maxThreads="150" scheme="https" secure="true"
       clientAuth="false" sslProtocol="TLS"            
           keystoreFile="C:\Cert\servcert"
           keystorePass="password"
           keyAlias="servcert"
/>

但是現在當我調用Web服務時,它給了我以下錯誤

javax.xml.ws.WebServiceException: Failed to access the WSDL at: https://localhost:8443/MyService/CalculatorPort?wsdl. It failed with: 
    Software caused connection abort: recv failed.
    com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:162)
    com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:144)
    com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:263)
    com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:226)
    com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:174)
    com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:104)
    javax.xml.ws.Service.<init>(Service.java:56)
    com.myeclipseide.ws.CalculatorService.<init>(CalculatorService.java:54)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:86)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

注意:

  1. 僅在禁用客戶端身份驗證的情況下啟用服務器端SSL時,它可以正常工作。
  2. 我已經在JDK的cacert密鑰庫中將服務器以及客戶端的證書導入為受信任的證書。
  3. 如果在瀏覽器中導入證書,即使啟用了客戶端身份驗證,我也可以訪問WSDL。 但是當我通過啟用了客戶端身份驗證的tomcat(2)中托管的客戶端訪問它時,它不起作用。

在我看來,客戶端未使用我已配置為tomcat(2)server.xml一部分的密鑰庫。 但我不確定。 請幫我解決這個問題。

我想出了解決這個問題的方法。 基本上,托管客戶端的tomcat(2)沒有使用我想要的證書。 解決辦法是Tomcat啟動期間通過以下JVM變量

  • javax.net.ssl.keyStore
  • javax.net.ssl.keyStorePassword

這些文檔可在Google上輕松找到。 可以在catalina.bat / catalina.sh文件中將它們配置為JAVA_OPTS

暫無
暫無

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

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