spring - Tomcat [9.0.26] - 调用安全服务 - TrustStore 与 KeyStore 配置差异和问题

标签 spring ssl tomcat ssl-certificate truststore

Tomcat SSL configuration是我们的 stackoverflow 论坛中一个被大量查询的区域 - 但是,尽管 Tomcat 声称设置起来很容易,但我仍然觉得最不了解!

我正在使用 Tomcat 9.0.26,并且必须使用第三方 (https) 网络服务。我的麻烦开始了:)。

  1. 首先是我的无知和 Tomcat 文档堆积起来。我正在尝试设置 keystoreFile。只有在几次尝试之后才意识到 keystore 和信任库之间的区别。简单来说,如果您希望部署在您的 tomcat 服务器上的应用程序通过安全的 HTTPS 协议(protocol)提供服务,则需要 keystore 。当您希望通过将证书存储在您的信任库中来使用另一个安全的 HTTPs Web 服务时,需要 TrustStore。默认的 tomcat SSL 文档会引导您进入 keystore 而不是信任库。

  2. 因此继续设置信任库

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
     maxThreads="150" scheme="https" secure="true"
     truststoreFile="C:\cert\myCert.p12" truststorePass="mypass" truststoreType="PKCS12" 
     clientAuth="false" sslProtocol="TLS+SSLV3" />
  1. 得知SSLConfig 元素已经产生,但Tomcat 9 仍然支持上面定义的旧配置。我尝试使用 SSLConfig 也没有取得成果,这部分似乎很少记录。

  2. 我无法使用运行时参数,因为某些其他服务因以下参数而失败。

-Djavax.net.ssl.trustStore=C:\cert\myCert.p12 -Djavax.net.ssl.trustStorePassword=mypass -Djavax.net.ssl.trustStoreType=PKCS12

需要有关我可以尝试解决此问题的指示的帮助,因为上述尝试仍未成功。

最佳答案

终于解决了这个问题。以上对trust store的理解是正确的。但是在 SSL 握手期间,我的服务器需要交换客户端身份验证“ key ”。这是必须将相同的证书存储设置为 keyStore 的地方,并发布一切正常!!

-Djavax.net.ssl.trustStore=C:\cert\myCert.p12 -Djavax.net.ssl.trustStorePassword=mypass -Djavax.net.ssl.trustStoreType=PKCS12 -Djavax.net.ssl.keyStore=C:\cert\myCert.p12 -Djavax.net.ssl.keyStorePassword=mypass

关于spring - Tomcat [9.0.26] - 调用安全服务 - TrustStore 与 KeyStore 配置差异和问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59223727/

相关文章:

java - 为什么@Value 作为构造函数的参数正确填充属性?

java - 一些 Spring 模型属性未显示在我的 JSP 中

node.js - 来自 Socket.io 的 s3_pkt.c 中的 HTTPS 错误 "data length too long"

java - 由于 JavaMail 消息,Tomcat 未启动

spring - 使用 Angular2 将 MultipartFile 作为请求参数发送到 REST 服务器

iphone - 带 NSURLConnection 的 HTTPS - NSURLErrorServerCertificateUntrusted

c# - 使用 https 协议(protocol)使用 webservice

java - 使用jsp保持用户登录

jsf - 从 quartz 作业调用应用程序范围的 bean 中的方法

java - 组件类中的 Autowiring bean 为 null