java - 如果我们传递 javax ssl 参数,Google Cloud Storage Client API 在证书验证中失败

标签 java google-app-engine ssl google-cloud-storage

我已经成功构建并运行了一个代码片段,使用 Java API 将文档上传到谷歌云存储。在将 Google Sql 集成到我们的项目中时,我们引入了 keystore 和信任库参数。在引入商店参数后,上传文档 API 失败并出现与认证相关的错误。

Dec 26, 2017 4:00:46 PM com.google.api.client.http.HttpRequest execute WARNING: exception thrown while executing request javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Caused by: com.google.cloud.storage.StorageException: Error getting access token for service account:

如果我们删除 javax ssl 参数,代码会按预期工作,是因为云存储 Api 使用云 sql ssl 证书连接到存储吗?如果是这样,有没有办法跳过云存储 API 中的证书检查?或者解决这个问题的最佳方法是什么?

最佳答案

是的,我们遇到了一个非常相似的复杂问题,结果证明是 MacAfee Web 网关 (MWG) 代理配置导致了这个问题。我们注意到 SSL 证书验证的一种奇怪行为,它在一个进程中工作,而在另一个进程中给出错误。它通过直接的命令行 Java 执行工作,但当我们通过容器运行相同的代码时出现错误。我们从 accounts.google.com 和 *.googleapsi.com 导入了所有证书。我们不知道该怎么做。

看起来 MacAfee Web 网关 (MWG) 代理白名单配置是基于客户端进程(exe 或脚本)名称。 MWG 的默认配置是将 Java.exe 进程的所有 HTTPS URL 列入白名单,但不包括其他进程 (exe) 名称,例如容器 (odi.exe)。由于 MacAfee Web 网关代理中的此设置,命令行 Java 代码成功运行,而来自容器的相同代码出错。我们还注意到,如果代理为 HTTPS URL 颁发了 SSL 证书,则 SSL 证书验证有效。

关于java - 如果我们传递 javax ssl 参数,Google Cloud Storage Client API 在证书验证中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47987417/

相关文章:

PHP CURL "NSS: client certificate not found (nickname not specified)"问题

java - 在 Java 中创建的半透明或透明图像在 Android OpenGL ES 中不显示

java - jOOQ:将select语句中的字段从type1转换为type2

java - 如何在 Eclipse 中导入 Java 库?

java - 从 JSP include 返回 500 错误

java - 数据存储实体键冲突

google-app-engine - App 引擎实例 ID

python - 谷歌应用引擎中的图像 exif 数据

c# - .Net SslStream 写/读问题

ssl - OpenSSL SSL_connect : SSL_ERROR_SYSCALL in connection to www. google.com:443