2016-08-18 81 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