Erlauben, selbst-signierte Zertifikate für die HTTPS-wrapper

Im Grunde genommen habe ich dieses:

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]");

Wobei [A] ist die URL auf einem server mit einem "echten" Zertifikat und [B] etwas ist auf einmal nur ein selbst-signiertes Zertifikat.

Mit [A] es funktioniert gut, mit [B] bekomme ich diese:

file_get_contents(): Failed to enable crypto

Das ist eine ziemlich unglückliche Fehlermeldung, sollte etwas gewesen sein wie "server certificate verification failed", aber gut...

Nun dachte ich: "ok, [B] ist mein test-system - i don 'T care für das Zertifikat" und verändert den Kontext, in diesem:

"verify_peer" => false,
"allow_self_signed" => true,

Es sollte akzeptieren nun alle server-Zertifikat, auch mein selbst unterschrieben ein. Aber es ist immer noch das gleiche Verhalten - [A] funktioniert, [B] jedoch nicht. Warum?


Btw: ich weiß, dass es funktioniert gut mit der curl-Erweiterung, aber ich möchte zu besiegen, ohne es.

  • Bitte definieren Sie "Mit [A] es funktioniert gut," ... weil keiner von denen sollte jemals arbeiten. Sie haben nicht angegeben "cafile" oder "capath" um PHP mitzuteilen, was CA-CERT für peer-überprüfung, und Sie haben versagt selbst-signierte Zertifikate. Weder [A] noch [B] könnte jemals erfolgreich eine Verbindung herstellen, wenn Sie tatsächlich mit den genauen code hier.
Schreibe einen Kommentar