簡體   English   中英

在localhost上的Google App Engine上“找不到系統CA捆綁包”

[英]“No system CA bundle could be found” on Google App Engine on localhost

我正在開發一款應用程序,我將在Google App Engine(GAE)中運行,該應用程序需要訪問GDrive API。 當它在雲端運行時,我可以使用我的特殊域范圍授權,以便我的用戶自動進行身份驗證,我可以毫無問題地使用gdrive api。 這非常有效。

但是, 在localhost上進行測試時 ,域范圍的身份驗證將無效,因為我們localhost實際上並未對您的Google帳戶進行身份驗證,您只能聲稱自己是您想要的任何人。 所以,我正在做的是在localhost和GAE中以不同方式實例化我的google $client 在GAE中,我在localhost上使用特殊的域范圍的auth, 然后我使用傳統的Google Client配置,其中包含客戶端ID,客戶端密鑰,oauth令牌處理等。

我重定向到Google,我告訴Google允許訪問,然后Google將我重定向回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設置設置為指向文件的路徑,從而省略'verify'請求選項。 有關更多信息,請參見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的代碼,您可能需要在設置Google客戶端和authenticate()調用之前通過執行以下操作來指定證書包的位置:

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

這將覆蓋默認行為,並允許您指定捆綁包的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM