具有单向和双向SSL的Tomcat
我有一个服务a,它使用单向SSL和双向SSL向服务B发出安全请求。单向SSL由Tomcat config指定,我提供keystrefile、keystorePass、enable SSL等。双向SSL在客户端(服务a)上使用JSSE实现。我知道这也可以在Tomcat server.xml中类似地完成(示例如下:) 我的单向SSL Tomcat配置的一部分:具有单向和双向SSL的Tomcat,tomcat,ssl,certificate,ssl-certificate,fqdn,Tomcat,Ssl,Certificate,Ssl Certificate,Fqdn,我有一个服务a,它使用单向SSL和双向SSL向服务B发出安全请求。单向SSL由Tomcat config指定,我提供keystrefile、keystorePass、enable SSL等。双向SSL在客户端(服务a)上使用JSSE实现。我知道这也可以在Tomcat server.xml中类似地完成(示例如下:) 我的单向SSL Tomcat配置的一部分: <Connector port="securePort" scheme="https" s
<Connector port="securePort"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
SSLEnabled="true"
keystoreFile="keystoreFile"
keystorePass="keystorePass"
keystoreType="keystoreType"
...
/>
但是,有没有一种方法可以为Tomcat中的同一服务同时指定单向和双向(客户端)SSL。这里的挑战是,我在同一IP上使用了两个证书(服务器和客户端)。有什么提示吗?当服务A向服务B发出带有客户端身份验证的SSL请求时,它不是服务器,而是客户端。这与在运行服务的Tomcat服务器上配置客户端身份验证无关 您的服务A如何获取其密钥库设置(它用作客户机)取决于它的实现方式以及它用于建立这些连接的库。它与任何独立客户端都没有什么特别的不同 它可能至少会通过系统属性选择默认设置。您可以在容器中设置
javax.net.ssl.keyStore
(和相关的)系统属性(例如,通过catalina.sh中的JAVA\u OPTS
或.bat
)。但是,容器中运行的所有webapp都可以使用这些设置(但是,如果您在容器中配置了不同的密钥库,
配置将不会使用这些设置)。像这样影响容器中的所有Web应用程序可能并不总是可取的
您还可以将密钥库文件放在客户端代码可以加载的位置(例如,在WEB-INF
下的某个位置),并将此密钥库作为资源流加载,以初始化客户端库使用的SSLContext
(如果您的客户端应用程序可以使用此类设置)。另一种可能的方法是通过JNDI传递密钥库。所有这些都取决于您希望如何配置服务的部署以及其代码的配置方式。我希望这就是您的场景
向端点提供一个-->1路SSL请求服务
服务B--->对端点的双向SSL请求
配置了2路SSL的Tomcat连接器
由于tomcat连接器配置了2路SSL,所有传入连接都将进行握手验证;这意味着,如果单向ssl端点没有密钥,握手将失败。要克服这个问题,您需要将单向ssl端点证书导入truststore
现在,单向和双向SSL都可以工作了