我对如何准备通配符证书并以可以在 WildFly/JBoss 中使用的方式添加它进行了一些研究(我使用的是 WildFly 16,但对于 JBoss 来说应该相同)。
我拥有的文件(以及它们是什么 - 来自辨别 GoDaddy SSL 证书类型):
<series of numbers>.crt
:我的证书gd_bundle-g2-g1.crt
:GoDaddy 证书包 - G2 可跨 G1,包括根证书gdig2.crt.pem
:GoDaddy 安全服务器证书(中级证书)-G2privatekey.txt
:我的证书的私钥
通过一系列研究和同事的帮助,我发现我可以通过以下命令准备和添加证书:
openssl pkcs12 -export -in <series of numbers>.crt -inkey privatekey.txt -out outfile.pkcs12 -name yourdomain.com -CAfile gd_bundle-g2-g1.crt -caname root
<enter a password>
keytool -importkeystore -trustcacerts -deststorepass <newpass> -destkeypass <newpass> -destkeystore new.keystore -srckeystore outfile.pkcs12 -srcstoretype PKCS12 -srcstorepass <password entered above> -alias yourdomain.com
所以,这一切都是可行的,至少在浏览器中是可行的。我可以浏览通过 WildFly 托管的页面,它们运行良好,浏览器不会报告 SSL 错误。但是,我使用 WebSocket 连接的应用程序无法验证证书。为了进一步研究这个问题,我对我的网站使用了以下方法:
openssl s_client -connect yoursite.yourdomain.com:443
结果如下:
Verification error: unable to verify the first certificate
研究完之后,我发现 Firefox 会执行“证书发现”并解析证书链以验证服务器的证书,即使没有提供。所以在这里我试图确定缺少了什么...
答案1
在尝试解决此问题时,我怀疑排除的文件对于解析链是必要的,但无法轻松确定如何将它们放入。我进行了一些反复试验,每次都使用 openssl s_client 进行测试,直到我找出有效的方法。这是直接从服务器解析链的一系列命令:
cat <series of numbers>.crt gdig2.crt.pem > bundle.crt
openssl pkcs12 -export -in bundle.crt -inkey privatekey.txt -out outfile.pkcs12 -name yourdomain.com -CAfile gd_bundle-g2-g1.crt -caname root
<enter a password>
keytool -importkeystore -trustcacerts -deststorepass <newpass> -destkeypass <newpass> -destkeystore new.keystore -srckeystore outfile.pkcs12 -srcstoretype PKCS12 -srcstorepass <password entered above> -alias yourdomain.com
简单的添加解决了这个问题。希望这对某些人有帮助!
答案2
这简直是不可能的。我在 Android 和 WildFly 上设置了双向 SSL,但无法让单向 SSL 与 WildFly 配合使用。这些愚蠢的 SSL 提供商只适用于 AWS EC2 和 Google App Engine 等高级应用程序。在 WildFly 中绝对没有关于安装这些证书的教程。
我已经尝试在 WildFly 上设置 GoDaddy 和 Comodo 证书几个小时了。
Certbot 与 Let's Encrypt 在 WildFly 上完美兼容。可惜,愚蠢的 iOS 无法与 Let's Encrypt 兼容。
您唯一的选择是使用像 Nginx 这样的第三方代理应用程序。