Im Grunde hat ich dies:Lassen Sie selbstsignierte Zertifikate für HTTPS-Wrapper
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]");
Wo [A] eine URL mit einem "echten" Zertifikat auf einem Server befindet und [B] ist etwas, auf einem mit nur einem selbstsigniertes Zertifikat
Mit [A] es funktioniert gut, mit [B] Ich bekomme diese:
file_get_contents(): Failed to enable crypto
die eine ziemlich unglückliche Fehlermeldung ist, dass so etwas wie „Server-Zertifikat Überprüfung nicht bestanden“ hätte sein sollen, aber in Ordnung. ..
nun dachte ich: „ok, [B] ist mein Testsystem - ich nicht für das Zertifikat ist egal“ und änderte den Zusammenhang in this:
"verify_peer" => false,
"allow_self_signed" => true,
Es should jetzt akzeptiert eine ny Serverzertifikat, sogar mein selbstsigniertes. Aber es ist immer noch das gleiche Verhalten - [A] funktioniert, [B] nicht. Warum?
Btw: Ich weiß, dass es gut mit der Curl-Erweiterung funktioniert, aber ich möchte das ohne es zu schlagen.
Bitte definieren * "Mit [A] funktioniert es gut" * ... weil keiner von beiden jemals funktionieren sollte Sie haben kein '" cafile "' oder '" capath "' angegeben, um PHP mitzuteilen, welche CAs zu verwenden sind zur Peer-Verifizierung, und Sie haben selbst signierte Zertifikate nicht zugelassen [A] noch [B] könnten sich jemals erfolgreich verbinden, wenn Sie tatsächlich den genauen Code verwenden, der hier gezeigt wird. – rdlowrey