【问题标题】:Error in Drupal 8 from Guzzle using Dev Desktop "cURL error 60: SSL certificate..."来自 Guzzle 的 Drupal 8 中的错误使用 Dev Desktop“cURL 错误 60:SSL 证书...”
【发布时间】:2018-01-23 16:24:38
【问题描述】:

MacOS 10.11

开发桌面版本 2

PHP 5.6

正在尝试加载包含 Google 地图的 Drupal 8 模板页面。适用于生产和开发服务器,但不适用于本地。页面给出“网站遇到意外错误。请稍后再试。”本地加载时出错,回溯显示以下信息:

错误:

GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) in GuzzleHttp\Handler\CurlFactory::createRejection() (line 187 of vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php).

诊断:

array(8) { ["default_cert_file"]=> string(68) "/Users/acquia/csbworkdir/dmitrybezer/libopenssl/install/ssl/cert.pem" ["default_cert_file_env"]=> string(13) "SSL_CERT_FILE" ["default_cert_dir"]=> string(65) "/Users/acquia/csbworkdir/dmitrybezer/libopenssl/install/ssl/certs" ["default_cert_dir_env"]=> string(12) "SSL_CERT_DIR" ["default_private_dir"]=> string(67) "/Users/acquia/csbworkdir/dmitrybezer/libopenssl/install/ssl/private" ["default_default_cert_area"]=> string(59) "/Users/acquia/csbworkdir/dmitrybezer/libopenssl/install/ssl" ["ini_cafile"]=> string(47) "/Applications/DevDesktop/common/cert/cacert.pem" ["ini_capath"]=> string(0) "" }

回溯:

GuzzleHttp\Handler\CurlFactory::finishError(Object, Object, Object) (Line: 103)
GuzzleHttp\Handler\CurlFactory::finish(Object, Object, Object) (Line: 43)
GuzzleHttp\Handler\CurlHandler->__invoke(Object, Array) (Line: 28)
GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}(Object, Array) (Line: 51)
GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}(Object, Array) (Line: 37)
GuzzleHttp\PrepareBodyMiddleware->__invoke(Object, Array) (Line: 30)
GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object, Array) (Line: 70)
GuzzleHttp\RedirectMiddleware->__invoke(Object, Array) (Line: 57)
GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object, Array) (Line: 67)
GuzzleHttp\HandlerStack->__invoke(Object, Array) (Line: 277)
GuzzleHttp\Client->transfer(Object, Array) (Line: 125)
GuzzleHttp\Client->requestAsync('get', 'https://maps.googleapis.com/maps/api/geocode/json', Array) (Line: 131)
GuzzleHttp\Client->request('get', 'https://maps.googleapis.com/maps/api/geocode/json', Array) (Line: 89)
GuzzleHttp\Client->__call('get', Array) (Line: 273)
GuzzleHttp\Client->get('https://maps.googleapis.com/maps/api/geocode/json', Array) (Line: 273)

似乎正在使用“default_cert_file”(并且在本地不存在)并且确实存在的文件“/Applications/DevDesktop/common/cert/cacert.pem”不是。默认值是从 Dev Desktop 中的 PHP 构建硬连线的。我不确定 Guzzle 是否不会费心尝试从可用列表中查找其他选项,或者我是否还有其他问题。

有没有办法覆盖 php.ini 中的“default_cert_file”...??还是有更好的解决方案?

我什至创建了 default_cert_file 正在寻找的位置,只是为了看看是否可以解决它,但它没有。

【问题讨论】:

  • 目前我编辑了本地 Guzzle 以始终跳过检查,这样我就可以完成工作。我更喜欢一个解决方案,但我读过的所有内容都说我需要使用文件路径编辑 php.ini 文件(你可以在上面看到它已经存在)或者有些人建议它想要“default_cert_file”......并且 Guzzle 不考虑其他任何内容,我应该降级到早期版本的 Guzzle。我做不到,这现在是 Drupal 的一部分。

标签: php curl drupal guzzle acquia


【解决方案1】:

尝试从那里下载证书文件:

https://curl.haxx.se/ca/cacert.pem

并在 php.ini 后面加上

; Added CA file path curl.cainfo = "{REPLACE WITH FILE PATH}/cacert.pem"

你应该很高兴

【讨论】:

  • 它在那里,但没有用。我尝试更换它,但这也不起作用。我看过 .pem 并且很好。当我用 drush 查看时,它是正确的 php.ini 文件,当我转储时,我看到它(在 ["ini_cafile"]=> string(47) "/Applications/DevDesktop/common/cert/cacert.pem" 上方)跨度>
  • 我今天在我的网站上遇到了类似的问题,它使用了旧版本的 Mailgun(PHP 电子邮件发件人)和不再支持的 Guzzle 3。使用您共享的链接中的最新 Mozilla CA 证书更新 MailGun 文件夹中的 cacert.pem 文件:/vendor/guzzle/guzzle/src/Guzzle/Http/Resources/cacert.pem 有帮助!
  • 是的,我怀疑 ioni 的这个解决方案会帮助很多人。这是许多在线建议的解决方案,包括在 Stack Exchange 上,我想搜索词现在也会让其他人回答这个问题。对我来说可悲的是它不起作用。
【解决方案2】:

从链接中获取 cacert.pem,然后复制到 /Program Files(x86)/DevDesktop/common/cert 文件夹。该位置已在 DevDesktop 的 php.ini 中引用。

【讨论】:

  • 我在 Mac 上。没有“/Program Files”
猜你喜欢
  • 2017-11-21
  • 2015-04-29
  • 1970-01-01
  • 2017-04-22
  • 2017-03-21
  • 2014-02-06
  • 2021-12-14
  • 2020-09-18
  • 1970-01-01
相关资源
最近更新 更多