我使用的是编码的PHP脚本,需要对CURL提供SSL支持。
我目前正在使用XAMPP进行本地开发,并且需要知道如何更新默认CURL,以便通过它启用SSL。
我正在寻找升级/支持的原因是我收到以下错误,当谷歌搜索等等时。我知道我的机器上的CURL不支持SSL。
SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
有人对我有什么建议吗? 我当前的本地服务器配置:
XAMPP 1.7.3 启用 cURL支持 cURL信息 7.19.6
Apache版本 Apache / 2.2.14(Win32)DAV / 2 mod_ssl / 2.2.14 OpenSSL / 0.9.8l mod_autoindex_color PHP / 5.3.1 mod_apreq2-20090110 / 2.7.1 mod_perl / 2.0.4 Perl / v5.10.1
已加载模块核心mod_win32 mpm_winnt http_core mod_so mod_actions mod_alias mod_asis mod_auth_basic mod_auth_digest mod_authn_default mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_cgi mod_dav mod_dav_fs mod_dav_lock mod_dir mod_env mod_headers mod_include mod_info mod_isapi mod_log_config mod_mime mod_negotiation mod_rewrite mod_setenvif mod_ssl mod_status mod_vhost_alias mod_autoindex_color mod_php5 mod_perl mod_apreq2
SERVER_SIGNATURE Apache / 2.2.14 (Win32)DAV / 2 mod_ssl / 2.2.14 OpenSSL / 0.9.8l mod_autoindex_color PHP / 5.3.1 mod_apreq2-20090110 / 2.7.1 mod_perl / 2.0.4 Perl / v5.10.1 Server at localhost端口80
SERVER_SOFTWARE Apache / 2.2.14(Win32)DAV / 2 mod_ssl / 2.2.14 OpenSSL / 0.9.8l mod_autoindex_color PHP / 5.3.1 mod_apreq2-20090110 / 2.7.1 mod_perl / 2.0.4 Perl / v5.10.1
答案 0 :(得分:10)
您的计算机不支持?您发布的错误意味着CURL无法验证远程服务器的SSL证书,也不一定表明您的计算机存在特定的不足之处。
在我之前使用CURL的经验中,它默认不接受/信任任何证书。根据您的设置以及您计划使用它的方式,您可能希望信任单个自签名证书 [[无法验证自签名证书!]] (例如,来自其他人)你运行的机器)或者你可能想要信任一个真正的证书颁发机构(它将支持验证该CA签署的任何证书)。如果您熟悉如何更改CURL的设置,本教程非常简单:
http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/
如果您采用该路径,则可以选择根CA,但如果您只是在两台自己的计算机之间保护传输,则只需将CURL设置为信任其他计算机的证书。
另一方面,如果你确实遇到了一些更深层次的SSL问题,它可能是由许多事情引起的,例如在没有SSL支持的情况下构建。如果您正在制作,配置和编译自己的CURL版本,您可能需要查看有关SSL的主题的http://curl.haxx.se/docs/faq.html,包括
http://curl.haxx.se/docs/sslcerts.html和 http://curl.haxx.se/docs/faq.html#What_certificates_do_I_need_when
请注意后一个链接(FAQ)无法验证自签名证书。如果您要连接到自己的另一台服务器,则需要由CA和CURL信任的CA证书对其证书进行签名,以使连接成功。如果您只需要获得签名,或者您可以设置自己的CA,那么就有免费的CA(根据我的经验,只有十倍的时间才能让已经设置好的人签名)。如果其他服务器正在托管一个处理“真实世界”(金钱,产品,个人信息等)的安全网站,那么它的证书应该是或者你应该让它由可信任的CA签署(VISA,Equifax,Comodo,您可以在每个浏览器中找到受信任的根CA列表。
我已经涵盖了我可以响应该错误的内容,但如果这些都没有帮助,那么有关您的设置和系统的更多信息可能有所帮助。 :)
答案 1 :(得分:8)
对我有用的一个非常简单的修复方法是:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
致电之前:
curl_exec():
在php文件中。
我认为这会禁用SSL证书的所有验证。
答案 2 :(得分:-1)
您应该使用证书颁发机构签署您的公钥(有一些脚本可以为您执行这些操作),或者您可以发送您的证书签名请求并使用您自己创建的CA或某些免费证书颁发机构对其进行签名。 ....
CA.pl脚本的路径/usr/lib/ssl/misc/CA.pl
此命令将创建一个证书颁发机构,该机构需要签署您的服务器密钥 此CA的公钥也必须包含在CA_file
中$ CA.pl -newca
为服务器创建私钥和认证请求
$ CA.pl -newreq
从私钥和请求(涉及CA私钥)
创建服务器证书$ CA.pl -sign