php SSL3\u获取\u服务器\u证书:证书验证失败
我在MacOSx El Capitan中运行PHP 5.6版作为XAMPP的一部分,在少数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文件
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));'