2016-08-18 83 views
0

我需要申請SSL「相互驗證」的Web服務(SOAP)和「單向認證」的網頁,以避免在瀏覽器證書。對於信息,GUI和SOAP Webservices位於同一個戰爭模塊中。爲Web服務啓用SSL「相互認證」併爲GUI啓用「單向認證」?

我使用SSL相互認證在Tomcat容器級別:

<Connector port="8443" protocol="HTTP/1.1" connectionTimeout="20000" 
SSLEnabled="true" 
scheme="https" 
secure="true" 
clientAuth="true" 
sslProtocol="TLS" 
keystoreFile="D:\certificates\demo-keystore" 
keystorePass="xxxxxxxx" 
truststoreFile="D:\certificates\demo-truststore" 
truststorePass="xxxxxxxx"/> 
  • clientAuth =「真」意味着有效證書鏈應該由客戶端來提供(來自一個瀏覽器和web服務消費者)在接受連接之前。我知道可以通過使用clientAuth =「false」將SSL連接器配置爲不需要來自客戶端的證書鏈,然後通過使用WSS4J攔截器在消息級應用WS-Security,但是我想知道是否存在另一個解。

在此先感謝您。

回答

0

檢查的javax.servlet.request.X509Certificate存在:

設置爲true,如果你想在SSL堆棧需要一個有效的證書 在接受連接之前從客戶端鏈接。設置爲想要如果 你想要SSL堆棧請求客戶端證書,但不失敗 如果沒有出現。假值(這是默認)將不會 需要一個證書鏈,除非客戶端請求由使用CLIENT-CERT 認證的安全約束保護的資源 。

我將clientAuth設置爲「false」並在WEB-INF/web.xml中配置了CLIENT-CERT身份驗證。這將需要對Web服務,URL模式/ WS/*客戶端證書:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>CXFServlet</web-resource-name> 
     <url-pattern>/ws/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

<login-config> 
    <auth-method>CLIENT-CERT</auth-method> 
</login-config> 
0

您可以使用具有許多SSL設置不同的屬性APR connector和配置SSLVerifyClient

<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 --> 
<Connector 
     protocol="org.apache.coyote.http11.Http11AprProtocol" 
     port="8443" maxThreads="200" 
     scheme="https" secure="true" SSLEnabled="true" 
     SSLCertificateFile="/usr/local/ssl/server.crt" 
     SSLCertificateKeyFile="/usr/local/ssl/server.pem" 
     SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"/> 

available optionsSSLVerifyClient

向客戶端證書。默認值是「無」,這意味着客戶將沒有機會提交證書。其他可接受的值包括「可選」,「要求」和「可選無CA」。

如果將其配置爲可選,則GUI無法顯示證書(因爲不是強制性的)。爲了確保客戶端證書已被提供了Web服務,基於Tomcat documentation約clientAuth屬性在HttpServletRequest