laravel:cURL错误60:SSL证书无法获得本地颁发者证书

时间:2017-09-06 16:23:12

标签: laravel ubuntu guzzle

Ubuntu:15.04

Laravel:5.4.32

GuzzleHttp \ Guzzle:~6.0

你好

当我尝试使用Laravel内置的身份验证重置密码时出现以下错误。当我输入我的电子邮件并点击重置时,我得到......

GuzzleHttp\Exceptions\RequestException cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

我已经用Google搜索了这个错误,并且从我读过的所有内容中我都尝试了以下内容,所有这些都没有用...

  • Ran phpinfo()找到正确的php.ini
  • 更新了curl.cainfo php.ini设置为" /etc/ssl/certs/cacert.pem"
  • 更新了 curl.cainfo php.ini设置为" /etc/ssl/certs/ca-certificated.crt"
  • 将openssl.cafile php.ini设置更新为" /etc/ssl/certs/cacert.pem"
  • 将openssl.cafile php.ini设置更新为" /etc/ssl/certs/ca-certificated.crt"

然而,在我重新启动apache后,没有任何工作。

我还跑了var_dump(openssl_get_cert_locations());给了我以下......

[
    "default_cert_file" => "/usr/lib/ssl/cert.pem", 
    "default_cert_file_env" => "SSL_CERT_FILE",
    "default_cert_dir" => "/usr/lib/ssl/certs",
    "default_cert_dir_env" => s"SSL_CERT_DIR",
    "default_private_dir" => "/usr/lib/ssl/private",
    "default_default_cert_area" => "/usr/lib/ssl",
    "ini_cafile" => "/etc/ssl/certs/ca-certificates.crt",
    "ini_capath" => "/etc/ssl/certs" ,
]

有人能给我一些想法吗?我错过了什么?

由于

3 个答案:

答案 0 :(得分:1)

在项目中添加cacert.pem文件,从

下载文件

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

将下载证书的副本复制到/vendor/guzzlehttp/guzzle/src文件夹中。更改文件Client.php找到名为getDefaultOptions()

的函数

用此替换$settings数组,

$settings = [
        'allow_redirects' => true,
        'exceptions'      => true,
        'decode_content'  => true,
        //'verify'          => true
        'verify'          => dirname(__FILE__).'/cacert.pem',
];

我所做的是验证添加了下载的文件配置,只更改了verify的值。

如果您想要不安全地发送curl请求,可以通过设置verify => false

来禁用SSL证书检查

警告:这会使请求绝对不安全

答案 1 :(得分:1)

我遇到了类似的问题。无需更改/vendor/guzzlehttp/guzzle/src/Client.php

也许这可以帮到你。

  1. https://curl.haxx.se/docs/caextract.html下载cacert.pem文件 把cacert.pem放在你喜欢的地方。

  2. 编辑php.ini

  3. 两行:

    curl.cainfo=D:/Servers/php/sslfiles/cacert.pem  
    openssl.cafile=D:/Servers/php/sslfiles/cacert.pem  
    
    1. 重启apache httpd。

答案 2 :(得分:0)

问题原因是IT部门更新了防火墙,而防火墙又以某种方式阻止了服务器发出请求(这与他们在发布问题时告诉我的情况相反)。一旦它被允许再次提出请求就行了。