【问题标题】:Enable SSL "Mutual Authentication" for WebServices and "One Way Authentication" for the GUI?为 Web 服务启用 SSL“相互验证”,为 GUI 启用“单向验证”?
【发布时间】:2016-12-25 04:38:03
【问题描述】:

我需要为 Web 服务 (SOAP) 应用 SSL“相互验证”,为网页应用“单向验证”以避免在浏览器中出现证书。作为参考,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 但我想知道是否还有另一个解决方案。

提前谢谢你。

【问题讨论】:

    标签: java web-services ssl tomcat6


    【解决方案1】:

    您可以使用具有不同属性的APR connector 进行许多 SSL 设置并配置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"/>
    

    SSLVerifyClientavailable options

    向客户索取证书。默认值为“none”,这意味着客户端将没有机会提交证书。其他可接受的值包括“可选”、“要求”和“可选NoCA”。

    如果您将其配置为可选,则 GUI 无法显示证书(因为不是强制性的)。为确保客户端证书已与 WebServices 一起提供,请检查 HttpServletRequest 中是否存在 javax.servlet.request.X509Certificate

    【讨论】:

      【解决方案2】:

      基于Tomcat documentation关于clientAuth属性:

      如果您希望 SSL 堆栈需要有效证书,请设置为 true 在接受连接之前从客户端链接。设置为想要如果 您希望 SSL 堆栈请求客户端证书,但不会失败 如果没有出现。错误值(默认值)不会 除非客户端请求资源,否则需要证书链 受使用 CLIENT-CERT 的安全约束保护 身份验证。

      我将 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-21
        • 2022-07-06
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 2019-02-27
        • 1970-01-01
        • 2016-09-01
        相关资源
        最近更新 更多