我将用PHP来从站点A一些POST数据到B站点。 站点A具有商业的SSL证书。 站点B都将有一个自签名的证书。 这是可行的? 如果不是,是否有在PHP(或Apache)的任何配置选项,我可以设置绕过限制?
Answer 1:
想必你将使用在服务器上的卷曲? 有一个在卷曲几个选项来禁用证书验证,which'll允许通过自签名的证书。 链接仍然会被加密,但你无法相信,服务器B真的是服务器B:
curlopt_ssl_verifypeer (checking the CA auth chain)
curlopt_ssl_verifyhost (hostname/certname match checks)
例如PHP代码:
$ch = curl_init("https://example.com/example/path");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($ch);
Answer 2:
这是可行的。 在PHP中,如果您使用的卷曲进行后,你只需要设置的选项CURLOPT_SSL_VERIFYPEER
和CURLOPT_SSL_VERIFYHOST
为false,以便它不会失败,因为证书是自签名。
Answer 3:
如果你问浏览器POST数据,那么用户将获得有关不被信任的证书正常警告。
如果您使用卷曲从你的PHP代码中执行的POST,你要禁用卷曲的SSL检查。 根据相关的问题 ,
你需要设置
CURLOPT_SSL_VERIFYPEER
和CURLOPT_SSL_VERIFYHOST
到FALSE
。 这应该>禁用两个主要的检查。 他们可能不都需要,但至少应该让你去。
Answer 4:
就我而言,我只是开发服务器是自签名的,所以我设置verifypeer选项设置为false和它的作品。 但我的生产服务器被完全的签名,所以不设置verifypeer选项。 在任一情况下,verifyhost选项是不必要的。
Answer 5:
提示禁用解答CURLOPT_SSL_VERIFYPEER
不应该被接受。 现在的问题是:“为什么不将其与卷曲的工作”,并且正确地指出,这是很危险的。 禁用证书检查打开了中间人攻击,这接近于只用纯文本HTTP门。
错误可能是由不具有CA根证书的一个上的最新束引起的。 这通常是用一堆卷曲用于验证主机的SSL证书加密签名的文本文件。
你需要确保你的PHP安装有一个这样的文件,而且它的最新的(否则在这里下载一个: http://curl.haxx.se/docs/caextract.html )。
然后在php.ini中设置:
curl.cainfo = <absolute_path_to> cacert.pem
如果你在运行时将其设置,使用方法:
curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
回答复制https://stackoverflow.com/a/23585500/2650835出于安全原因。