【发布时间】:2018-10-25 00:31:28
【问题描述】:
- 操作系统:Ubuntu 16.04
- PHP : 7.2
- CURL : curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
- 狂饮:6.3
我的项目目前正在使用一些依赖于Guzzle的包,例如:AWS,Mailgun......但是,它经常抛出这个错误:
error: cURL error 77: error setting certificate verify locations:
CAfile: /etc/ssl/certs
CApath: /etc/ssl/certs (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
下面是我的 php.ini 的一部分
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo='/etc/ssl/certs/ca-certificates.crt'
[openssl]
; The location of a Certificate Authority (CA) file on the local filesystem
; to use when verifying the identity of SSL/TLS peers. Most users should
; not specify a value for this directive as PHP will attempt to use the
; OS-managed cert stores in its absence. If specified, this value may still
; be overridden on a per-stream basis via the "cafile" SSL stream context
; option.
openssl.cafile='/etc/ssl/certs/ca-certificates.crt'
; If openssl.cafile is not specified or if the CA file is not found, the
; directory pointed to by openssl.capath is searched for a suitable
; certificate. This value must be a correctly hashed certificate directory.
; Most users should not specify a value for this directive as PHP will
; attempt to use the OS-managed cert stores in its absence. If specified,
; this value may still be overridden on a per-stream basis via the "capath"
; SSL stream context option.
openssl.capath='/etc/ssl/certs/'
这些都不起作用,即使通过 ini_get() 检索它也可以并且完全识别。现在,我必须通过修改 vendor/guzzlehttp/guzzle/src/Client.php 并将默认配置调整为 'verify' => '/etc/ssl/certs/ ca-certificates.crt' 然后一切正常(我认为这不是一个好的选择)
通过 init_get() 检索
array(8) {
["default_cert_file"]=> string(21) "/usr/lib/ssl/cert.pem"
["default_cert_file_env"]=> string(13) "SSL_CERT_FILE"
["default_cert_dir"]=> string(18) "/usr/lib/ssl/certs"
["default_cert_dir_env"]=> string(12) "SSL_CERT_DIR"
["default_private_dir"]=> string(20) "/usr/lib/ssl/private"
["default_default_cert_area"]=> string(12) "/usr/lib/ssl"
["ini_cafile"]=> string(34) "/etc/ssl/certs/ca-certificates.crt"
["ini_capath"]=> string(15) "/etc/ssl/certs/"
}
openssl.cafile: /etc/ssl/certs/ca-certificates.crt
curl.cainfo: /etc/ssl/certs/ca-certificates.crt
注意:我已尝试将 ~/.curlrc 与 export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt 但这些都不起作用
有没有人有任何解决方案或任何线索来解决这个问题?
【问题讨论】:
-
可能是因为它是 CRT 而不是 PEM?
标签: laravel ssl curl openssl guzzle