首页 文章

具有单向和双向SSL的Tomcat

提问于
浏览
3

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

我的单向SSL Tomcat配置的一部分:

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

Is there a way to specify both 1-way and 2-way (client side) SSL for the same service in Tomcat 虽然 . 这里的挑战是我在同一个IP上使用2个证书(服务器和客户端1) . 任何提示?

2 回答

  • 0

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

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

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

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

  • 1

    我希望这是你的情景

    服务A ---> 1路SSL请求到 endpoints 服务B ---> 2路SSL请求到 endpoints Tomcat连接器配置2路SSL

    由于tomcat连接器配置了2路SSL,因此所有传入连接都将被验证用于握手;这意味着如果1路ssl endpoints 没有密钥,则握手将失败 . 要解决此问题,您需要将1路ssl endpoints 证书导入truststore

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

相关问题