Closed linzebing closed 9 years ago
应该是 Windows 下 curl 没有找到证书,无法发送 https 的请求。我们回头再测试并检测 windows 下的部署问题。谢谢报告。
一个解决办法是,在 php.ini 中指定证书:
[PHP]
curl.cainfo={path}/ca-bundle.crt
如果没有证书,可以参考这里来获取:http://curl.haxx.se/docs/caextract.html
curl 手册关于证书的说明:
--cacert [file]
curl recognizes the environment variable named 'CURL_CA_BUNDLE' if it is set, and uses the given path as a path to a CA cert bundle. This option overrides that variable.
The windows version of curl will automatically look for a CA certs file named 'curl-ca-bundle.crt', either in the same directory as curl.exe, or in the Current Working Directory, or in any folder along your PATH.
If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module (libnsspem.so) needs to be available for this option to work properly.
总结两种方案供参考:
curl-ca-bundle.crt
置于 curl.exe 相同的目录,通常情况下位于 C:\Windows\system32
。curl-ca-bundle.crt
置于自定义的目录,然后在 php.ini 中明确设置证书位置:[PHP]
curl.cainfo={path}/ca-bundle.crt
感谢 已修复
第一次接触证书问题,能详细说一下获取证书的问题吗?每一个开始和结束都算是一个证书吗?我怎么制作证书呢?
我的环境是wampserver2.2,curl.exe文件找不到,我只能使用第2个方法,但是没有任何效果,求助......
@juvenn
找到最简单的方法了。 把Client.php文件中有段代码curl_setopt($req, CURLOPT_SSL_VERIFYPEER, true);改成curl_setopt($req, CURLOPT_SSL_VERIFYPEER, false); 就可以了,何须上面如此麻烦
@duanqiping 这样会引来安全风险,不推荐使用。
@duanqiping windows 下面的目录分割符应该是 \
,你试着调整一下:
curl.cainfo=C:\wamp\bin\...\ca-bundle.crt
CURLOPT_SSL_VERIFYPEER
是对数据加密的选项,建议不要设为 false
,否则会以明文传输有安全风险。
@duanqiping 抱歉纠正一下,CURLOPT_SSL_VERIFYPEER
是验证对方的身份,如果设为 false
会有被中间人攻击的风险。数据仍会加密传输。
你好 这里是什么问题?