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“你的连接不安全”,“对方的证书颁发者不被识别”。
这就是我所做的:
- 我使用Java 1.8 keytool创build了我的私钥和证书请求。
- 获取一个根证书.cer,一个中间.cer和一个网站.cer文件
- 我把根证书放到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
-
我也按照这个顺序将它们连接在一起成为一个pem文件:
1. website cert 2. intermediate cert 3. company cert
- 并用keytool将它们插入到jks中:
keytool -import -alias app-cert1 -file chain.pem -v -keystore my-app.jks
- 我将它们构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存储区。