java - 无法在 java maven 应用程序中找到请求的目标 google recaptcha 的有效认证路径
问题描述
我用 Google reCaptcha v3 制作了一个 Maven 网络应用程序,它在 Centos 服务器上的 Glassfish 5 上运行。联系表单页面向https://www.google.com/recaptcha/api/siteverify发出请求并发送令牌和站点密钥。如果请求来自机器人或人类,您将获得一个回答问题的 json 对象。
当 Java 发送该请求时,出现连接错误:
sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径
Java 或 Glassfish 服务器不信任该网站,因为它的密钥库中没有有效证书,如此处所述所述。
使用 /opt/jdk1.8.0_181/jre/lib/security/cacerts(存储证书的密钥库)中的 keytool (/opt/jdk1.8.0_181/jre/bin/keytool) 导入证书不起作用。
解决方案
在 Glassfish 域文件夹中(在我的例子中,它位于 /home/glassfish/glassfish5/glassfish/domains/domain1 中)有一个配置文件夹,其中包含一个名为 cacerts.jks 的文件。您可以使用 keytool 进行编辑,但也可以使用 Keytool Explorer ( https://keystore-explorer.org/ ) 进行编辑。按照她的解释,用浏览器下载证书。您可以将 SSL 服务器证书下载为 .crt。就我而言,它是 wwwgooglecom.crt。使用上面的 Keystore 工具可以轻松导入它。上传文件 cacerts.jks 并重新启动 Glassfish 服务器。
推荐阅读
- django - 如何正确编写需要处理复杂对象的api(检索、创建、更新方法)
- node.js - NodeJS Express 和 ReactJS 的 CORS 错误
- django - 函数“prefetch_related”的“*lookups”参数的品种
- javascript - Bootstrap modal 通过 js bug 关闭
- angular - Angular 递归 HTTP 请求,组合响应,最终返回单个 observable
- python - 当保存为字符串时,CSV 阅读器将数字转换为小数
- delphi - SetWindowPlacement 有时会因最大化窗口而失败
- tensorflow - 无法在 tensorflow r1.14 中导入“tensorflow.contrib.tensorrt”
- r - 如何在 igraph 中为 R 置换网络?
- kubernetes - 如何通过 terraform 在新配置的 EKS 集群上修复 kubernetes_config_map 资源错误?