Also diese späteren zwei können nicht über Laufzeitkonfiguration Richtlinien geändert werden.
ich die Verwirrung aus der Dokumentation hier unter reproduziert verstehen können, aber diese beiden Absätze beziehen sich eigentlich anderes Konzept in PHP zwei.
Link to PHP manual source
Zunächst ist zu beachten, dass die Dokumentation selbst einen klaren Unterschied zwischen openssl.cafile
und openssl.capath
macht auf globaler Basis zu sein oder auf einer pro Anfrage Basis gegen verify_peer
und verify_peer_name
für eine Anforderung sein nur. So bedeutet
, dass im Grunde, dass, wenn openssl.cafile
und openssl.capath
können sowohl über php.ini
oder über stream_context_set_option
angepasst werden, auf der anderen Seite verify_peer
und verify_peer_name
sind nur über stream_context_set_option
.
Dies wird auch von PHP-Quellcode selbst bestätigt, hier sind einige Zeilen, die zeigen, dass PHP
unterlagernden C
Sprache erhält den Wert von php_stream_context_get_option
nur.
must_verify_peer_name = GET_VER_OPT("verify_peer_name")
? zend_is_true(val)
: sslsock->is_client;
Link to PHP github source code
Aus Gründen der Übersichtlichkeit ist hier die Erklärung des Makro GET_VER_OPT
#define GET_VER_OPT(name) (PHP_STREAM_CONTEXT(stream) && (val = php_stream_context_get_option(PHP_STREAM_CONTEXT(stream), "ssl", name)) != NULL)
Link to PHP github source code
Wenn cafile
und capath
tatsächlich zuerst abgestimmt gegen php_stream_context_get_option
Wert, aber dann, wenn diese NULL
in der Kontext werden sie dann in der Ini-Konfiguration abgerufen.
GET_VER_OPT_STRING("cafile", cafile);
GET_VER_OPT_STRING("capath", capath);
if (cafile == NULL) {
cafile = zend_ini_string("openssl.cafile", sizeof("openssl.cafile")-1, 0);
cafile = strlen(cafile) ? cafile : NULL;
}
Link to PHP github source code
Dann ein wenig tiefer in die exakt gleiche Funktion:
if (capath == NULL) {
capath = zend_ini_string("openssl.capath", sizeof("openssl.capath")-1, 0);
capath = strlen(capath) ? capath : NULL;
}
Link to PHP github source code
Aus Gründen der Übersichtlichkeit ist hier die Erklärung des Makro GET_VER_OPT_STRING
#define GET_VER_OPT_STRING(name, str) if (GET_VER_OPT(name)) { convert_to_string_ex(val); str = Z_STRVAL_P(val); }
Link to PHP github source code
Sie können auch sehen, dass, wenn die beiden Werte openssl.capth
und openssl.cafile
als bestehende ini
Konfiguration definiert werden, die später verify_peer
und verify_peer_name
sind nirgendwo gefunden werden.
So traurig der einzige Weg zu gehen, da die Dokumentation es veranlasst, ist es über stream_context_set_option ($stream_or_context , 'ssl' , 'verify_peer_name' , false)
Bitte beachten Sie auch für eine Anfrage zu konfigurieren: der Standardwert dieser beiden SSL Kontextoptionen geändert in PHP Version 5.6.0, wie von der Dokumentation aufgefordert:
5.6.0 peer_fingerprint und verify_peer_name hinzugefügt. Der Standardwert von verify_peer wurde auf TRUE geändert.
Link to PHP documentation
Was bedeutet, dass diese Art von Problem so PHP von PHP < 5.6.0
nach der Aktualisierung auftreten kann, auch wenn ich das nicht empfehlen, da PHP 5.5
is coming to the end of is support life cycle, der Standardwert dieser beiden Optionen kann zu falsch gehalten werden indem man an einer PHP
Version niedriger als 5.6.0
klebt.
Dies ist nur eine Warnung, es sollte nicht fehlschlagen – cmorrissey
Es gibt eine Warnung an die Konsole, aber tatsächlich 'stream_socket_enable_crypto()' gibt 0 (fehlschlägt) zurück. –
Haben Sie die Lösung dafür gefunden? – Thibault