为Web服务启用SSL“相互身份验证”,为GUI启用“单向身份验证”?

时间:2016-08-18 09:45:32

标签: java web-services ssl tomcat6

我需要为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"/>
  • clientAuth =“true”表示在接受连接之前,客户端(来自浏览器和Web服务使用者)应提供有效的证书链。我知道可以通过使用clientAuth =“false”将SSL连接器配置为不需要来自客户端的证书链,然后使用WSS4J拦截器在消息级别应用WS-Security,但我想知道是否还有另一个溶液

提前谢谢。

2 个答案:

答案 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>