我需要为Web服务(SOAP)应用SSL“相互身份验证”,为Web页面应用“单向身份验证”以避免在浏览器中使用证书。对于informationg,GUI和SOAP Web服务在同一个war模块中。
我在Tomcat容器级别使用了SSL Mutual身份验证:
<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"/>
提前谢谢。
答案 0 :(得分: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"/>
SSLVerifyClient
的{{3}}是
向客户询问证书。默认值为&#34; none&#34;,表示客户端无法提交证书。其他可接受的值包括&#34;可选&#34;,&#34;要求&#34;和&#34; optionalNoCA&#34;。
如果将其配置为可选,则GUI无法显示证书(因为不是必需的)。要确保已向Web服务提供客户端证书,请检查javax.servlet.request.X509Certificate
中是否存在HttpServletRequest
答案 1 :(得分:0)
基于Tomcat documentation关于clientAuth属性:
如果希望SSL堆栈需要有效证书,请设置为true 在接受连接之前从客户端链接。设置为想要 您希望SSL堆栈请求客户端证书,但不会失败 如果没有提出。假值(默认值)不会 除非客户端请求资源,否则需要证书链 受使用CLIENT-CERT的安全约束保护 认证
我将clientAuth设置为&#34; false&#34;并在WEB-INF / web.xml中配置了CLIENT-CERT身份验证。这将需要具有url pattern / 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>