首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SSL3_GET_SERVER_CERTIFICATE:certificate验证失败

SSL3_GET_SERVER_CERTIFICATE:certificate验证失败
EN

Stack Overflow用户
提问于 2016-04-07 13:03:14
回答 1查看 3.9K关注 0票数 4

我在MacOSx El Capitan中作为XAMPP的一部分运行PHP5.6,并且在少数https站点上出现错误。例如:https://www.google.com/

file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

但是这些站点上没有返回SSL错误:

  1. GitHub
  2. 作曲家
  3. PayPal最小二乘检验

请先找一下我到目前为止尝试过的清单,但是没有什么效果。

第一次尝试Google:

  1. 证书:证书验证失败
  2. PHP证书错误:无法获得本地颁发者证书
  3. 证书:证书验证失败,CA没有问题

手册

1.更新的cert.pem文件

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

结果是。

代码语言:javascript
运行
复制
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] =>
)

此文件cacert.pem保存在/Applications/XAMPP/xamppfiles/share/openssl/cert.pem

使用以下内容更新了php.ini

代码语言:javascript
运行
复制
openssl.cafile = /Applications/XAMPP/xamppfiles/share/openssl/cert.pem
curl.cainfo    = /Applications/XAMPP/xamppfiles/share/openssl/cert.pem

重新启动阿帕奇但没有成功。尝试读取pem文件(没有返回错误)

代码语言:javascript
运行
复制
echo file_get_contents("/Applications/XAMPP/xamppfiles/share/openssl/cert.pem");

测试用例

它在github.com getcomposer.org paypal.com上工作得很好,但在google.com上却不起作用(google.com在我的windows系统上也能工作)

代码语言:javascript
运行
复制
php -r '$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://tlstest.paypal.com/"); var_dump(curl_exec($ch)); var_dump(curl_error($ch));'

结果:PayPal_Connection_OKbool(true)

但在google.com

代码语言:javascript
运行
复制
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 certificate problem: unable to get local issuer certificate"

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

EN

回答 1

Stack Overflow用户

发布于 2016-05-25 04:02:52

在我的例子中,确保存在正确的cert.pem文件是不够的。您还需要使用php.ini键将php.ini中的时区设置为实际时区(在我的示例中,我将其设置为美国/洛杉矶)。否则,PHP将默认使用UTC,您的系统时钟将被关闭。这解决了我在(10.11.2)上的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36477062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档