“找不到系统 CA 捆绑包”在本地主机上的 Google App Engine 上


"No system CA bundle could be found" on Google App Engine on localhost

我正在开发一个应用程序,我将在需要访问GDrive API的Google App Engine(GAE)中运行。当它在云中运行时,我能够使用我特殊的域范围授权,以便我的用户自动进行身份验证,并且我可以毫无问题地使用 gdrive api。这很有效。

但是,在 localhost 上进行测试时,全域身份验证将不起作用,因为我们 localhost 实际上并没有对您的 Google 帐户进行身份验证,您只能声称自己是您想要的任何人。所以,我正在做的是在本地主机和 GAE 中以不同的方式实例化我的谷歌$client。在 GAE 中,我使用特殊的域范围身份验证,在本地主机上,然后我使用传统的 Google 客户端配置,其中包含客户端 ID、客户端密钥、oauth 令牌处理等。

我重定向到谷歌,我

告诉谷歌允许访问,然后谷歌将我重定向回localhost以完成oauth过程。当我从谷歌拿code并打电话时:

$client->authenticate($authcode);

我收到有关缺少 CA 捆绑包的 SSL 错误。

在任何

通用系统中都找不到系统 CA 捆绑包 地点。未正确配置 5.6 之前的 PHP 版本 以默认使用系统的 CA 捆绑包。为了验证对等 证书,您需要将磁盘上的路径提供给 证书捆绑到"验证"请求选项: http://docs.guzzlephp.org/en/latest/clients.html#verify。如果你不这样做 需要一个特定的证书包,那么Mozilla提供了一个常见的 已使用的 CA 捆绑包,可在此处下载(由 cURL 的维护者): https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt。 磁盘上有可用的 CA 捆绑包后,可以设置 'openssl.cafile' PHP ini 设置指向文件的路径, 允许您省略"验证"请求选项。看 http://curl.haxx.se/docs/sslcerts.html 了解更多信息。

我已经下载了 .crt 文件,我也尝试下载他们的 .pem 文件,我尝试以多种方式配置我的 php.ini 以使其使用这些文件......

openssl.cafile="/path/to/ca-bundle.crt"

openssl.cafile="/path/to/cacert.pem"

curl.cainfo="/path/to/ca-bundle.crt"

curl.cainfo="/path/to/cacert.pem"

但它们似乎都没有奏效或有所作为。我错过了什么?

编辑:

告诉我在生产和本地主机上进行身份验证意味着您不明白我在问什么或我需要使用客户端的原因。我的问题是关于证书的。

我终于从这个答案中找到了一个解决方案,请去投票他们的答案。

浏览Google和Guzzle的代码,您可能需要指定 可以通过执行以下操作找到证书捆绑包 在您设置谷歌客户端时和之前 身份验证() 调用:

$client->setHttpClient(new GuzzleHttp'Client(['verify'=>'path'to'your'cert-bundle']));

这将覆盖默认行为,并允许您指定 捆绑是。