我们正在使用 Google 的 Gmail API(https://gmail.googleapis.com/gmail/v1/users/{用户ID}/history) 在我们的应用程序中,API 返回具有不同 CN 的证书:有时 CN 是“google.com”,有时是“*.googleapi.com”。它还能返回其他 CN 吗?是否有一个标准的 CN 列表,我们可以参考并在代码中处理它?
出于安全原因,这对我们来说很重要。我们在应用程序代码中使用以下内容。
NetHttpTransport.Builder().trustCertificates(GoogleUtils.getCertificateTrustStore()).setProxy(代理).setHostnameVerifier(new CustomHostNameVerifier()).build();
在这里,CustomHostNameVerifier 检查严格的 CN 检查,如果证书中的 CN 与 API 中的 URL 中的 CN 不匹配,则检查失败,因此从安全角度来看,它表现良好。然而,我们的 API 调用最近开始因为这些不同的 CN 而失败。
1.以下是工作场景,其中 google 正在返回带有 CN 作为 *.googleapi.com 的证书,此 API 请求工作正常。
2.下面是无法正常工作的情况,其中 Google 将 CN 发送为“google.com”,此请求失败,因为 API URL 包含 googleapis.com,但 Google 返回的证书的 CN 为“google.com”,因此此 API 请求失败。