Ken*_*and 9 php ssl google-app-engine curl
我正在开发一款应用程序,我将在Google App Engine(GAE)中运行,该应用程序需要访问GDrive API.当它在云中运行时,我可以使用我的特殊域范围授权,以便我的用户自动进行身份验证,我可以毫无问题地使用gdrive api.这非常有效.
但是,在localhost上进行测试时,域范围的身份验证将无效,因为我们localhost实际上并未对您的Google帐户进行身份验证,您只能声称自己是您想要的任何人.所以,我正在做的是$client在localhost和GAE中以不同方式实例化我的谷歌.在GAE中,我在localhost上使用特殊的域范围auth,然后我使用传统的Google Client配置,其中包含客户端ID,客户端密钥,oauth令牌处理等.
我重定向到Google,我告诉Google允许访问,然后Google将我重定向回localhost以完成oauth进程.当我code从谷歌和电话:
$client->authenticate($authcode);
Run Code Online (Sandbox Code Playgroud)
我收到有关缺少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设置设置为指向文件的路径,从而省略'verify'请求选项.有关更多信息,请参见 http://curl.haxx.se/docs/sslcerts.html.
我已经下载了.crt文件,我也尝试下载他们的.pem文件,我尝试以几种方式配置我的php.ini以使其使用这些文件...
openssl.cafile="/path/to/ca-bundle.crt"
Run Code Online (Sandbox Code Playgroud)
要么
openssl.cafile="/path/to/cacert.pem"
Run Code Online (Sandbox Code Playgroud)
要么
curl.cainfo="/path/to/ca-bundle.crt"
Run Code Online (Sandbox Code Playgroud)
要么
curl.cainfo="/path/to/cacert.pem"
Run Code Online (Sandbox Code Playgroud)
但它们似乎都不起作用或有所作为.我错过了什么?
编辑:
告诉我在生产和本地主机上验证相同意味着你不明白我在问什么或者我需要使用客户端的原因.我的问题是关于证书.
我终于从这个答案中找到了解决方案,请为他们的答案投票。
查看 Google 和 Guzzle 的代码,您可能需要在设置 Google 客户端时以及调用authenticate() 之前执行类似以下操作来指定可以在哪里找到证书包:
Run Code Online (Sandbox Code Playgroud)$client->setHttpClient(new GuzzleHttp\Client(['verify'=>'path\to\your\cert-bundle']));这将覆盖默认行为并让您指定捆绑包的位置。
| 归档时间: |
|
| 查看次数: |
1939 次 |
| 最近记录: |