适用于 Java 的 Google Http 客户端:忽略 java.security.cert.CertPathValidatorException:未找到证书路径的信任锚 [重复]

2024-03-08

我在用着Google 的 Java HTTP 客户端 https://developers.google.com/api-client-library/java/在我的 Android 应用程序中。在我们进行 QA 测试时,我的服务器暂时使用自签名证书。当我们发布时,我们将拥有一个正确签名的证书,但现在我只需要忽略......

CertPathValidatorException: Trust anchor for certification path not found.

...错误消息并告诉 API 继续处理 http 请求/响应。

我在 Google 文档中找不到任何可以禁用此检查的内容。我发现了一些关于其他 API 的 Stack Overflow 帖子,但没有找到关于 Google HTTP 客户端的帖子。

import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.UrlEncodedContent;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.JsonObjectParser;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.Maps;
import com.google.api.client.util.escape.CharEscapers;

...

static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
HttpRequestFactory requestFactory =
                HTTP_TRANSPORT.createRequestFactory(new HttpRequestInitializer() {
                    @Override
                    public void initialize(HttpRequest request) {
                        request.setParser(new JsonObjectParser(JSON_FACTORY));
                        request.setConnectTimeout(defaultTimeoutSeconds()*1000);
                        request.setReadTimeout(defaultTimeoutSeconds()*1000);
                    }
                });

我花了一些时间在 Google 的 HttpTransport 的 javadoc 中爬行并间接找到了我的答案。

Google 提供了 HttpTransport 的两种实现:NetHttpTransport 和 ApacheHttpTransport。前者使用 Java 的基本 HttpURLConnection 来完成所有通信,是首选。后者在幕后使用 Apache httpclient,Google HttpTransport 文档表示,如果您需要基本 NetHttpTransport 中不可用的高级配置参数,请使用 Apache。

而不是像这样初始化我的传输常量:

static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();

我正在使用 ApacheHttpTransport Builder,它提供了跳过证书验证的选项。

... new ApacheHttpTransport.Builder().doNotValidateCertificate().build();

注意:对于以后得出这个答案的人来说,这是一个坏主意。我仅在受控的 QA 环境中进行此操作,并且在我们获得正确签名的 SSL 证书的短时间内完成此操作。一旦我们的签名证书就位,我将返回到上面的原始代码,并要求我的应用程序的所有 api 通信都需要正确签名的证书。

不要在生产代码中执行此操作。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

适用于 Java 的 Google Http 客户端:忽略 java.security.cert.CertPathValidatorException:未找到证书路径的信任锚 [重复] 的相关文章

随机推荐