Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php SSL3\u获取\u服务器\u证书:证书验证失败_Php_Macos_Curl_Openssl - Fatal编程技术网

php SSL3\u获取\u服务器\u证书:证书验证失败

php SSL3\u获取\u服务器\u证书:证书验证失败,php,macos,curl,openssl,Php,Macos,Curl,Openssl,我在MacOSx El Capitan中运行PHP 5.6版作为XAMPP的一部分,在少数https站点上出现错误。e、 g:https://www.google.com/ file\u get\u contents():SSL操作失败,代码为1。OpenSSL错误消息:错误:14090086:SSL例程:SSL3\u获取\u服务器\u证书:证书验证失败 但在这些站点上未返回SSL错误: 请先找到列表,我已经尝试过了,但没有任何效果 先尝试谷歌: 手册 1。更新的cert.pem文件

我在MacOSx El Capitan中运行PHP 5.6版作为XAMPP的一部分,在少数
https
站点上出现错误。e、 g:
https://www.google.com/

file\u get\u contents():SSL操作失败,代码为1。OpenSSL错误消息:错误:14090086:SSL例程:SSL3\u获取\u服务器\u证书:证书验证失败

但在这些站点上未返回SSL错误:

  • 请先找到列表,我已经尝试过了,但没有任何效果

    先尝试谷歌:

  • 手册 1。更新的cert.pem文件

    php-r'print_r(openssl_get_cert_locations());'

    结果是

    Array
    (
        [default_cert_file] => /Applications/XAMPP/xamppfiles/share/openssl/cert.pem
        [default_cert_file_env] => SSL_CERT_FILE
        [default_cert_dir] => /Applications/XAMPP/xamppfiles/share/openssl/certs
        [default_cert_dir_env] => SSL_CERT_DIR
        [default_private_dir] => /Applications/XAMPP/xamppfiles/share/openssl/private
        [default_default_cert_area] => /Applications/XAMPP/xamppfiles/share/openssl
        [ini_cafile] => /Applications/XAMPP/xamppfiles/share/openssl/cert.pem
        [ini_capath] =>
    )
    
    保存在
    /Applications/XAMPP/xamppfiles/share/openssl/cert.pem

    更新了
    php.ini
    ,内容如下

    openssl.cafile = /Applications/XAMPP/xamppfiles/share/openssl/cert.pem
    curl.cainfo    = /Applications/XAMPP/xamppfiles/share/openssl/cert.pem
    
    重新启动Apache,但没有成功。尝试读取pem文件(未返回错误)

    测试用例

    它在
    github.com
    getcomposer.org
    paypal.com
    上运行正常,但在
    google.com
    上运行不正常(google.com在我的windows系统上也运行正常)

    结果:
    PayPal\u连接\u OKbool(真)

    但是在
    google.com

    php -r '$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.google.com/"); var_dump(curl_exec($ch)); var_dump(curl_error($ch));'
    
    结果:
    string(63)“SSL证书问题:无法获取本地颁发者证书”


    p.S:禁用对等验证是不可接受的。

    在我的情况下,确保正确的cert.pem文件存在是不够的。您还需要使用
    date.timezone
    键将php.ini中的时区设置为实际时区(在我的例子中,我将其设置为America/Los Angeles)。否则,PHP将默认使用UTC,系统时钟将显示为关闭。这为我在MacOSX El Capitan(10.11.2)上解决了这个问题

    php -r '$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://tlstest.paypal.com/"); var_dump(curl_exec($ch)); var_dump(curl_error($ch));'
    
    php -r '$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.google.com/"); var_dump(curl_exec($ch)); var_dump(curl_error($ch));'