java - 无法在 java maven 应用程序中找到请求的目标 google recaptcha 的有效认证路径

标签 java centos keytool glassfish-5

我用 Google reCaptcha v3 制作了一个 Maven 网络应用程序,它在 Centos 服务器上的 Glassfish 5 上运行。联系表格页面向 https://www.google.com/recaptcha/api/siteverify 发出请求并发送一个 token 和一个站点 key 。如果请求来自机器人或人类,您将获得一个回答问题的 json 对象。

当 Java 发送该请求时,出现连接错误:

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targe



Java 或 Glassfish 服务器不信任该网站,因为它的 keystore 中没有有效证书,如 here 所述。 .

使用/opt/jdk1.8.0_181/jre/lib/security/cacerts(存储证书的 keystore )中的 keytool (/opt/jdk1.8.0_181/jre/bin/keytool) 导入证书不起作用。

最佳答案

在 Glassfish 域文件夹(在我的情况下,它位于/home/glassfish/glassfish5/glassfish/domains/domain1)中有一个配置文件夹,其中包含一个名为 cacerts.jks 和 keystore.jks 的文件。您可以使用 keytool 对其进行编辑,但也可以使用 Keytool Explorer ( https://keystore-explorer.org/ ) 进行编辑。
按照说明使用浏览器下载证书her .您可以将 SSL 服务器证书下载为 .crt。在我的例子中是 wwwgooglecom.crt 但您也可以选择自己的电子邮件服务器(在我的例子中是 leenheeren.nl.cert。使用上面的 Keystore 工具导入它更容易。上传文件 cacerts.jks 和 keystore。 jks 并重新启动 Glassfish 服务器。
cacert.jks 和 keystore.jks 之间的区别如下: cacerts 是 Java 存储根 CA(域的)公共(public)证书的地方。 Java 使用 cacerts 对服务器进行身份验证。 Keystore 是 Java 存储客户端私钥的地方,以便在服务器请求客户端身份验证时可以将其共享给服务器。

关于java - 无法在 java maven 应用程序中找到请求的目标 google recaptcha 的有效认证路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54646175/

相关文章:

elasticsearch - 无法启动面临权限问题的logstash

tomcat - Keytool 无法链接导入的 PKCS12 证书?

java - java.lang.NullPointerException 的问题

java - 用于 Windows SSL 实现的 Apache Tomcat 不工作

java - 如何在没有 stop() 方法的情况下停止线程?

Java 用户输入 YY-MM-DD 格式

node.js - 如何在我的专用服务器上安装 Node Js

python -/iris/is 中的未捕获异常(也是 [Errno 101] 网络无法访问)

java - 为 JTable 添加标题

java - 这个Service层是否违反了SRP原则