基本上我有这个:
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,
它现在应该接受任何服务器证书,甚至是我的自签名证书。但它仍然是相同的行为 - [A] 有效,[B] 无效。为什么?
顺便说一句:我知道它适用于 curl 扩展,但我想在没有它的情况下击败它。