Wie man die Option 'verify_peer_name = false' für den SSL-Kontext über php.ini in PHP 5.6 setzt

8

Der Fall: Ich möchte die SSL-Verbindung zu localhost öffnen, während das SSL-Zertifikat Probleme mit dem FQDN hat.

Das Problem: Ohne spezielle Behandlung in Zeile (*) schlägt das folgende Programm mit der folgenden Meldung fehl:

PHP Warning: stream_socket_enable_crypto(): Peer certificate CN='myhost.com' did not match expected CN='localhost' in test.php

Das PHP-Testprogramm:

%Vor%

Da ich viel älteren Code habe, würde ich gerne eine Lösung haben, indem ich nur Änderungen an php.ini (oder CLI) anwende, aber leider funktioniert keiner der folgenden:

php -d verify_peer_name=false test.php

php -d ssl.verify_peer_name=false test.php

Ideen?

Referenzen:

dma_k 07.11.2014, 21:15
quelle

1 Antwort

7

TL; DR

Wenn cafile und capath gleichzeitig Laufzeitkonfiguration und SSL-Kontextoptionen , verify_peer_name und verify_peer sind nur SSL-Kontextoptionen .

Diese beiden letzteren können also nicht über Laufzeit-Konfigurationsdirektiven geändert werden.

Ich kann die Verwirrung aus der Dokumentation nachvollziehen, die hier wiedergegeben wird, aber diese beiden Absätze beziehen sich eigentlich auf zwei verschiedene Konzepte in PHP.

  

Das Standard-CA-Paket kann auf globaler Ebene überschrieben werden   Entweder die Konfigurationseinstellung openssl.cafile oder openssl.cafath, oder   auf einer pro Anfrage Basis mit den Cafile oder Capath Kontextoptionen.

     

Obwohl dies generell nicht empfohlen wird, ist es möglich Peer zu deaktivieren   Zertifikatsüberprüfung für eine Anfrage durch Setzen des verify_peers   context-Option auf FALSE, und Peer-Namen-Validierung durch zu deaktivieren   Setzen Sie die context-Option verify_peer_name auf FALSE.

Link zur manuellen PHP-Quelle

Beachten Sie zunächst, dass die Dokumentation selbst eine deutliche Differenz zwischen openssl.cafile und openssl.capath auf globaler Basis oder pro Anfrage und verify_peer macht. und verify_peer_name ist nur für eine Anfrage .

Das bedeutet also im Grunde, dass openssl.cafile und openssl.capath sowohl über php.ini als auch über stream_context_set_option angepasst werden können, andererseits sind verify_peer und verify_peer_name nur über stream_context_set_option erreichbar.

Dies wird auch durch den PHP-Quellcode selbst bestätigt, hier sind einige Zeilen, die zeigen, dass PHP underlaying C language nur den Wert von php_stream_context_get_option erhält.

%Vor%

Link zum PHP-Quellcode github

>

Hier ist zur Verdeutlichung die Deklaration des Makros GET_VER_OPT

%Vor%

Link zum PHP-Quellcode github

>

Wenn cafile und capath tatsächlich zuerst mit php_stream_context_get_option value abgeglichen werden, aber wenn diese im Kontext NULL sind, werden sie dann in der ini-Konfiguration abgerufen.

%Vor%

Link zum PHP-Quellcode github

>

Dann etwas tiefer in genau der gleichen Funktion:

%Vor%

Link zum Quellcode von PHP github

>

Hier ist zur Verdeutlichung die Deklaration des Makros GET_VER_OPT_STRING

%Vor%

Link zu PHP github-Quellcode

>

Sie können auch sehen, dass, wenn diese beiden Werte openssl.capth und openssl.cafile sind definiert als bestehende ini Konfiguration, die spätere verify_peer und verify_peer_name sind nirgendwo zu finden.

Leider ist der einzige Weg zu gehen, wie die Dokumentation es fordert, es für eine Anfrage über stream_context_set_option ( $stream_or_context , 'ssl' , 'verify_peer_name' , false )



Bitte beachten Sie auch : Der Standardwert dieser beiden SSL-Kontextoptionen wurde in PHP Version 5.6.0 geändert, wie in der Dokumentation gefordert:

  

5.6.0 peer_fingerprint und verify_peer_name hinzugefügt. Der Standardwert von verify_peer wurde auf TRUE geändert.

Link zur PHP-Dokumentation

Was bedeutet, dass diese Art von Problem auftreten kann, nachdem ich PHP von PHP < 5.6.0 aktualisiert habe, auch wenn ich das nicht empfehle, da PHP 5.5 nähert sich dem Ende des Supportzyklus , der Standardwert dieser beiden Optionen kann auf false gehalten werden, indem eine PHP -Version kleiner als 5.6.0 beibehalten wird.

    
b.enoit.be 24.05.2016 00:04
quelle

Tags und Links