【发布时间】:2012-12-26 02:09:52
【问题描述】:
基本上我有这个:
function request($url) {
return file_get_contents($url, false, stream_context_create(array(
"ssl" => array(
"verify_peer" => true,
"allow_self_signed" => false,
)
)));
}
request("https://[A]");
request("https://[B]");
其中 [A] 是具有“真实”证书的服务器上的某个 URL,而 [B] 是仅具有自签名证书的服务器上的某个 URL。
使用 [A] 可以正常工作,使用 [B] 我明白了:
file_get_contents(): Failed to enable crypto
这是一个相当不幸的错误消息,应该是“服务器证书验证失败”之类的,但很好......
现在我想:“好吧,[B] 是我的测试系统 - 我不在乎证书”并将上下文更改为:
"verify_peer" => false,
"allow_self_signed" => true,
它should 现在接受任何服务器证书,甚至是我的自签名证书。但它仍然是相同的行为 - [A] 有效,[B] 无效。为什么?
顺便说一句:我知道它适用于 curl 扩展,但我想在没有它的情况下击败它。
【问题讨论】:
-
请定义 "使用 [A] 可以正常工作" ...因为这些都不应该工作。您尚未指定
"cafile"或"capath"来告诉 PHP 使用什么 CA 证书进行对等验证,并且您已禁止自签名证书。如果您确实使用此处显示的确切代码,则 [A] 和 [B] 都无法成功连接。
标签: php https certificate self-signed