2012-08-09 47 views
0

我是基於Https/SSL的配置的新手。我嘗試啓用啓用了客戶端身份驗證的簡單Calculator Web服務。以下是從我的Tomcat連接器項目(1)的server.xml中Web服務客戶端身份驗證導致在Tomcat中發生異常

<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的一部分的keystore。但我不確定。請幫我解決這個問題。

回答

0

我想出瞭解決這個問題的辦法。基本上託管客戶端的Tomcat(2)沒有使用我打算的證書。解決辦法是Tomcat啓動期間通過以下JVM變量這些

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

文檔可以很容易地發現谷歌。它們可以在catalina.bat/catalina.sh文件中配置爲JAVA_OPTS

相關問題