使用自签名证书POST请求(POST request with a self-signed cert

2019-08-03 12:06发布

我将用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_VERIFYPEERCURLOPT_SSL_VERIFYHOST为false,以便它不会失败,因为证书是自签名。



Answer 3:

如果你问浏览器POST数据,那么用户将获得有关不被信任的证书正常警告。

如果您使用卷曲从你的PHP代码中执行的POST,你要禁用卷曲的SSL检查。 根据相关的问题 ,

你需要设置CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOSTFALSE 。 这应该>禁用两个主要的检查。 他们可能不都需要,但至少应该让你去。



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出于安全原因。



文章来源: POST request with a self-signed certificate