Java的jks keystore在AWS的docker上的tomcat上有CA,中级和网站证书给出“Peer's Certificate Issuer is not recognized”

我已经把jks keystore和Java 1.8 cacerts与来自我公司的证书提供者的证书放在一起,仅供内部使用,并将其构build到我的应用程序的docker版本中,并部署它并成功启动服务器并通过Chrome和Edge连接到它,但Windows 10上的Firefox没有连接,给SEC_ERROR_UNKNOWN_ISSUER“你的连接不安全”,“对方的证书颁发者不被识别”。

这就是我所做的:

  1. 我使用Java 1.8 keytool创build了我的私钥和证书请求。
  2. 获取一个根证书.cer,一个中间.cer和一个网站.cer文件
  3. 我把根证书放到java的cacerts中:
keytool -importcert -alias app-cert1 -file AD1GXECA001-SHA2-Root.cer -v -keystore c:/dev/tools/Java/jdk1.8.0_131/jre/lib/security/cacer 

TS

  1. 我也按照这个顺序将它们连接在一起成为一个pem文件:

     1. website cert 2. intermediate cert 3. company cert 
  2. 并用keytool将它们插入到jks中:
 keytool -import -alias app-cert1 -file chain.pem -v -keystore my-app.jks 
  1. 我将它们构build到我的docker映像中,该映像运行一个带有tomcat和应用程序的Spring引导器:
 CMD -Dlogging.file=/logs/my-app.log -Djava.security.auth.login.config=/config/login.conf -Djava.security.krb5.conf=/config/krb5.conf -Djavax.net.ssl.trustStore=/config/cacerts -Djavax.net.ssl.trustStorePassword=changeit -Djavax.net.debug=ssl -jar /my-app.jar 

和Springconfiguration:

 server.ssl.key-alias=app-cert1 server.ssl.key-password=changeit server.ssl.key-store=file:/config/my-app.jks server.ssl.key-store-provider=SUN server.ssl.key-store-type=JKS 

我看到在构build或tomcat日志中没有错误。

我的问题在哪里? 火狐? Windows 10? 泊坞窗?

Chrome和Edge是否真的没有问题? 这是否意味着它必须是Firefox?

错误信息仅仅意味着Firefox无法build立从其证书存储区(通常是根CA)的可信证书到网站证书的链。

由于您已经在Tomcat的SSL密钥库中导入完整的链(不包括根CA),Tomcat会将这些证书传递给客户端。 所以,你在服务器端很好。 但在客户端(在这种情况下,Firefox)你需要一个信任锚,所以你必须将根证书导入Firefox。

Chrome / Edge获得不同结果的原因是Firefox拥有自己的证书存储区,而Chrome和Edge则使用Windows存储区。