3

我有一个使用 1-way SSL 和 2-way SSL 向服务 B 发出安全请求的服务 A。1-way SSL 由 Tomcat 配置指定,我提供 keystoreFile、keystorePass、启用 SSL 等。2-way SSL在客户端(服务 A)上使用 JSSE 实现。我知道这也可以在 Tomcat server.xml 中类似地完成(示例在这里:http ://blog1.vorburger.ch/2006/08/setting-up-two-way-mutual-ssl-with.html )。

我的 1-way SSL Tomcat 配置的一部分:

<Connector port="securePort"
           scheme="https"
           secure="true"
           clientAuth="false"
           sslProtocol="TLS"
           SSLEnabled="true"
           keystoreFile="keystoreFile"
           keystorePass="keystorePass"
           keystoreType="keystoreType"
           ...
/>

有没有办法为Tomcat中的同一服务指定1路和2路(客户端)SSL。这里的挑战是我在同一个 IP 上使用 2 个证书(服务器和客户端一个)。有什么提示吗?

4

2 回答 2

1

当服务 A 通过客户端身份验证向服务 B 发出 SSL 请求时,它不是服务器,而是客户端。这与在运行服务 A 的 Tomcat 服务器上配置客户端身份验证无关。

您的服务 A 如何获取其密钥库设置(它用作客户端)取决于它的实现方式以及它使用哪些库来建立这些连接。它与任何独立客户端都没有特别的不同。

它可能至少会通过系统属性获取默认设置。您可以javax.net.ssl.keyStore在容器中设置(和相关的)系统属性(例如通过JAVA_OPTSincatalina.sh.bat)。<Connector/>但是,这些设置将可供容器内运行的所有 Web 应用程序使用(但如果您在那里配置了不同的密钥库,则这些设置不会被您的配置使用)。像这样影响容器中的所有 webapp 可能并不总是可取的。

您还可以将您的密钥库文件放在您的客户端代码可以加载它的位置(例如,在 下的某处WEB-INF)并将此密钥库作为资源流加载以初始化SSLContext您的客户端库使用的(如果您的客户端应用程序可以使用此类设置)。另一种可能的方法是通过 JNDI 传递密钥库。所有这一切都取决于您希望如何配置服务的部署以及期望如何配置其代码。

于 2013-09-05T13:12:31.713 回答
0

我希望这是你的场景

服务 A ---> 对端点的 1 路 SSL 请求 服务 B ---> 对配置有 2 路 SSL 的端点 Tomcat 连接器的 2 路 SSL 请求

由于 tomcat 连接器配置了 2 路 SSL,所有传入连接都将经过握手验证;这意味着如果 1 路 ssl 端点没有密钥,握手将失败。要克服这个问题,您需要将 1 路 ssl 端点证书导入信任库

现在 1 路和 2 路 SSL 都可以工作

于 2016-10-18T05:07:51.013 回答