在 XAMPP 中为 CURL 启用 SSL 支持
Posted
技术标签:
【中文标题】在 XAMPP 中为 CURL 启用 SSL 支持【英文标题】:Enabling SSL Support for CURL in XAMPP 【发布时间】:2011-05-22 17:13:10 【问题描述】:我正在使用编码的 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.6Apache 版本 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加载的模块 core 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_apreq2SERVER_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 服务器位于 localhost 端口 80SERVER_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
【问题讨论】:
【参考方案1】:您的机器不支持?您发布的错误意味着 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 版本,您可能需要查看http://curl.haxx.se/docs/faq.html 关于 SSL 的主题,包括
http://curl.haxx.se/docs/sslcerts.html 和 http://curl.haxx.se/docs/faq.html#What_certificates_do_I_need_when
请注意后一个链接(常见问题解答)中的自签名证书无法验证。如果您要连接到您自己的另一台服务器,则其证书需要由 CA 签名,并且 CA 的证书需要 CURL 信任才能成功连接。如果您只需要获得签名,或者您可以设置自己的 CA(根据我的经验,让已经设置好的人签名要容易十倍),那里有免费的 CA。如果另一台服务器正在托管一个处理“现实世界”(金钱、产品、个人信息等)的安全站点,那么它的证书应该是或者你应该得到一个受信任的 CA 签名(VISA、Equifax、Comodo、您可以在每个浏览器中找到受信任的根 CA 列表)。
我已经介绍了我可以针对该错误采取的措施,但如果这些都无济于事,那么有关您的设置和系统的更多信息可能会有所帮助。 :)
【讨论】:
【参考方案2】:对我有用的一个非常简单的解决方法是调用:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
调用前:
curl_exec():
在 php 文件中。
我相信这会禁用 SSL 证书的所有验证。
【讨论】:
... 并且通过禁用证书验证,您为潜在的 MITM 攻击敞开大门,否则 SSL/TLS 旨在防止这些攻击。不要这样做! 是的。我应该在答案中引起更多关注。仅当您没有处理任何重要的事情时才这样做。我在 localhost 上使用它来访问我个人编写的网站。【参考方案3】:您应该使用证书颁发机构签署您的公钥(有一些脚本可以为您做这些事情),或者您可以发送您的证书签名请求并使用您自己创建的 CA 或一些免费的证书颁发机构对其进行签名.. ....
CA.pl 脚本的路径 /usr/lib/ssl/misc/CA.pl
此命令将创建一个证书颁发机构,该证书颁发机构需要签署您的服务器密钥 此 CA 的公钥也必须包含在 CA_file 中
$ CA.pl -newca
为服务器创建一个私钥和一个认证请求
$ CA.pl -newreq
根据私钥和请求创建服务器证书(涉及 CA 私钥)
$ CA.pl -sign
【讨论】:
在 ubuntu 中,您可以在此路径 /usr/lib/ssl/misc/CA.pl 中找到此(CA.pl)脚本以上是关于在 XAMPP 中为 CURL 启用 SSL 支持的主要内容,如果未能解决你的问题,请参考以下文章