Google GlassFish 5.1 中缺少 reCAPTCHA 所需的证书

Google reCAPTCHA required certificate missing in GlassFish 5.1

我有一个使用 Google reCAPTCHA V2 的网络应用程序。它在 JDK 1.8.0_144 的 GlassFish 5.0 和 JDK 1.8.0_231 的 WildFly 14 中工作正常。我用 JDK 1.8.0_231 将它部署到 GlassFish 5.1 服务器。站点验证失败,出现以下异常:

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

我了解缺少必需的证书。该证书存在于 5.0 的 cacerts.jks 文件中,但在 5.1 中丢失。用keytool列出他们的内容,我可以看到5.0版本的cacerts.jks文件有76个证书,而5.1版本的文件只有2个(glassfish-instance和s1as)。将 5.1 的 cacerts.jks 文件替换为 5.0 的文件,我的应用程序在 5.1 中工作正常。

我在 Google reCAPTCHA 的网页中找不到有关所需证书的任何信息。我如何识别并获得所需的证书?

我找到了解决办法。就是这样:

  1. 使用 Chrome 浏览器打开 https://www.google.com/recaptcha/api/siteverify
  2. 单击地址前面的黑色挂锁。
  3. 单击证书
  4. Select 详细信息 选项卡,然后单击 复制到文件... 按钮;将证书保存到 .cer 文件。例如,recaptcha.cer.
  5. 使用 keytool 将 .cer 文件导入 glassfish/domains/domain1/config/cacerts.jks。这是命令行:keytool -import -file recaptcha.cer -alias recaptcha -keystore GLASSFISH_HOME/glassfish/domains/domain1/config/cacerts.jks -storepass changeit。 keytool.exe 文件位于 JAVA_HOME/bin.
  6. 重新启动 GlassFish

我希望这对没有证书经验的其他程序员有所帮助。

警告:证书有效期只有3个月左右;我拿到的那个有效期到明年1月2号,看来这个程序还得定期重复。

编辑 2019 年 11 月 13 日:尽管证书声称有效期至 1 月,但此解决方案只工作了几天。我获得了另一个证书并重复了该过程,但是这次没有用。所以我真的还没有找到解决办法