基本的に私はこれを持っています:
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拡張機能でうまく機能することは知っていますが、それなしでこれを打ち負かしたいです。