当前位置: 首页 > 知识库问答 >
问题:

是否为WebServices启用SSL“相互身份验证”并为GUI启用“单向身份验证”?

施德运
2023-03-14

我需要对Web服务(SOAP)应用SSL“相互身份验证”和对网页应用“单向身份验证”,以避免浏览器中存在证书。对于informationg,GUI和SOAP Webservices位于同一个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"/>
  • clientAuth=“true”意味着在接受连接之前,客户端(从浏览器和web服务使用者)应该提供有效的证书链。我知道,通过使用clientAuth=“false”,然后使用WSS4J拦截器在消息级别应用WS-Security,可以将SSL连接器配置为不需要来自客户端的证书链,但我想知道是否有其他解决方案

提前谢谢你。

共有2个答案

贺博厚
2023-03-14

基于Tomcat留档关于clientAuth属性:

如果希望SSL堆栈在接受连接之前需要来自客户端的有效证书链,请设置为true。如果希望SSL堆栈请求客户端证书,请将其设置为want,但如果未提供客户端证书,则不会失败。假值(默认值)将不需要证书链,除非客户端请求受使用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>
汪臻
2023-03-14

您可以使用APR连接器,它对许多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"/>

SSLVerifyClient的可用选项是

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

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

 类似资料:
  • 我正在尝试为相互身份验证设置ActiveMQ,以便客户端需要证书才能将消息传递给代理。我在代理上创建了一个密钥库和一个信任库,并导出了一个复制到客户端的证书。在客户端,我也做了同样的事情,尽管我使用的是NMS,所以我只使用导出的证书,我将其添加到代理的信任库中。我还将证书添加到另一个本地计算机可信根证书中。 代理的配置如下: ${activemq.base}/conf/login.config $

  • 在不限制客户端证书的情况下,TLS中的相互身份验证有什么用? 以下是我对使用TLS的客户端/相互身份验证的理解。 现在rfc5246表示如下 这不会实现任何身份验证正确吗?例如,如果我有一个服务器信任由世界各地受信任的CA签署的任何证书,那么为什么还要费心于客户端身份验证呢?

  • 我试图设置2方式ssl身份验证。我的要求是经纪人应该只认证特定的客户。 我的组织有一个CA,它发行pkcs12格式的所有证书。我遵循的步骤如下。 获取代理的证书,并在代理密钥库中配置它 当我运行代理和客户端时,我希望代理验证客户端并建立ssl连接。但是下面的错误被抛出。 当我用只包含CA证书的信任存储文件替换 /etc/pki/java/cacerts代理信任存储时,它工作得很好。但是它将验证任何

  • 我正在尝试在两个LAMP服务器之间进行相互ssl身份验证。 我实际上有3台服务器。一个是主服务器,另外两个是对其进行SOAP调用的客户端。 在主客户端和一个客户端上,我安装了Comodo Postive SSL证书。我可以从该客户端连接到主客户端并成功进行SSL身份验证。 在第二个客户端上,我安装了一个Lets加密证书。我从他们的网站上获得了根证书(并使用https://whatsmychainc

  • 我正在使用spring security 5和spring boot 2.0.0 我有一个测试配置文件。 我有springBootApplication文件。 安全日志在下面

  • 我已经在Netty中尝试了双向SSL身份验证 但这个例子不再显示任何信息,只是一个404未找到。我在这里找到了一些帮助: https://github.com/code4craft/netty-learning/blob/master/netty-3.7/src/main/java/org/jboss/netty/example/securechat/SecureChatSslContextFac