如何使用 CA 签名证书在 Jetty 中正确配置 SSL?

How to configure SSL in Jetty with CA signed certificate properly?

我正在尝试保护我的 eXist-db 应用程序,这意味着我想保持打开状态的唯一端口应该是 8443(用于使用 WebDAV 和管理应用程序)。这是 eXist-db 安装后打开的基本安全端口。它使用自签名证书。我可以用新证书替换默认证书,但问题是我无法使用 CA 签名证书执行此操作。

我试过了:

  1. sudo rm eXist-db/tools/jetty/etc/keystore
  2. cat ServerCertificate.crt Alpiro-TrustProvider-IntermediateCA.crt Root.cer > cert-chain.txt
  3. 我清理了坏行并验证了每个证书都在新行开始。
  4. openssl pkcs12 -export -inkey my-app.key -in cert-chain.txt -out my-app.pkcs12
  5. keytool -importkeystore -srckeystore my-app.pkcs12 -srcstoretype PKCS12 -destkeystore eXist-db/tools/jetty/etc/keystore

重启后,我检查了连接:openssl s_client -connect xx.xx.xxx.xxx:8443,一切正常。我可以看到有我的可信证书并且连接 (handshake) 正常工作。但是,浏览器仍然声称它不是可信连接。

当我尝试通过 XQuery 通过 https 检查某些内容时,它抛出:

java.security.cert.CertificateException: No subject alternative names matching IP address xx.xx.xxx.xxx found …

解决方案非常简单。问题是我一直试图通过 IP 访问该站点,而不是通过完全限定的域名。证书关联的是域名,不是IP!