[英]Enable SSL “Mutual Authentication” for WebServices and “One Way Authentication” for the GUI?
我需要對Web服務(SOAP)應用SSL“相互認證”,對Web頁面應用“單向認證”,以避免瀏覽器中具有證書。 為了提供信息,GUI和SOAP Web服務位於同一war模塊中。
我在Tomcat容器級別使用了SSL相互身份驗證:
<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"/>
先感謝您。
您可以對許多SSL設置使用具有不同屬性的APR連接器 ,並配置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"/>
SSLVerifyClient
的可用選項是
向客戶要求證書。 默認值為“無”,這意味着客戶端將沒有機會提交證書。 其他可接受的值包括“可選”,“要求”和“ optionalNoCA”。
如果將其配置為可選,則GUI無法顯示證書(因為這不是強制性的)。 為了確保客戶端證書已經與WebServices一起提供,請檢查HttpServletRequest
是否存在javax.servlet.request.X509Certificate
。
基於有關clientAuth屬性的Tomcat文檔 :
如果您希望SSL堆棧在接受連接之前需要來自客戶端的有效證書鏈,則設置為true。 如果希望SSL堆棧請求客戶端證書,則設置為want,但如果未提供證書,則不會失敗。 除非客戶端請求受使用CLIENT-CERT身份驗證的安全性約束保護的資源,否則false值(默認值)將不需要證書鏈。
我將clientAuth設置為“ false”,並在WEB-INF / web.xml中配置了CLIENT-CERT身份驗證。 這將需要具有URL模式/ ws / *的Web服務的客戶端證書:
<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.