OpenSSL Änderungen in PHP 5.6.x
Streamwrapper verifizieren nun standardmäßig Zertifikate und Hostnamen bei Verwendung von SSL/TLS
Alle verschlüsselten Clientstreams verifizieren nun standardmäßig den
Kommunikationspartner. Standardmäßig wird dafür das Standard-CA-Bundle
von OpenSSL zur Verifikation des Peer-Zertifikates herangezogen. In
den meisten Fällen sind keine Änderungen notwendig, um mit Servern
mit gültigen SSL-Zertifikaten zu kommunizieren, da Distributoren
üblicherweise OpenSSL mit vertrauenswürdigen CA-Bundles konfigurieren.
Das Standard-CA-Bundle kann global durch eine Änderung der
konfigurationseinstellungen openssl.cafile oder openssl.capath
überschrieben werden, oder für einzelne Requests durch die
Verwendung der Kontextoptionen
cafile
oder
capath
.
Obwohl dies generell nicht empfehlenswert ist, kann die Verifikation
der Peer-Zertifikate für einzelne Requests ausgeschaltet werden, indem
die Kontextoption
verify_peer
auf false
gesetzt wird. Die Verifikation des Peer-Namen kann durch
das Setzen von
verify_peer_name
verify_peer_name
auf false
ausgeschaltet werden.
Fingerabdrücke von Zertifikaten
Es wurde Unterstützung für das Auslesen und Verifizieren von Fingerabdrücken
von Zertifikaten hinzugefügt. openssl_x509_fingerprint()
kam hinzu, um den Fingerabdruck aus X.509-Zertifikaten auszulesen und zwei
neue SSL Streamkontext-Optionen wurden
hinzugefügt: capture_peer_cert
zum Auslesen des X.509-
Zertifikats des Kommunikationspartners und peer_fingerprint
zur Durchsetzung, dass das Zertifikat des Kommunikationspartners dem
angegebenen Fingerabdruck entsprechen muss.
Aktualisierung der Standardchiffren
Die von PHP verwendeten Standardchiffren wurden auf eine sicherere Liste
aktualisiert, basierend auf den
» Mozilla Chiffreempfehlungen,
mit zwei zusätzlichen Ausnahmen: anonyme Diffie-Hellman Chiffren und RC4.
Auf diese Liste kann mit der neuen Konstante
OPENSSL_DEFAULT_STREAM_CIPHERS
zugegriffen und (wie in
früheren PHP-Versionen) durch das Setzen der Kontextoption
ciphers
übersteuert werden.
Komprimierung standardmäßig deaktiviert
Komprimierung von SSL/TLS wurde standardmäßig deaktiviert, um die
CRIME-Attacke zu umgehen. PHP 5.4.13 fügte die Kontextoption
disable_compression
hinzu, um die Komprimierung zu deaktivieren. Dies ist nun standardmäßig
auf true
(d. h. Komprimierung deaktiviert) gesetzt.
Servern wird erlaubt, die Reihenfolge bevorzugter Chiffren festzulegen
Die SSL Kontextoption honor_cipher_order
wurde
hinzugefügt, um Servern von verschlüsselten Streams die Umgehung der
BEAST-Schwachstelle zu ermöglichen, indem die Chiffren des Servers gegenüber
denen des Clients bevorzugt werden.
Neue Optionen für Perfect Forward Secrecy bei Servern für verschlüsselte Streams
Verschlüsselte Clientstreams unterstützen Perfect Forward Secrecy bereits, da
dies üblicherweise vom Server kontrolliert wird. Es muss nichts zusätzlich
unternommen werden, um PFS bei verschlüsselten PHP-Server-Streams zu aktivieren,
die Zertifikate verwenden, welche Perfect Forward Secrecy unterstützen. Es wurden
jedoch einige neue SSL-Kontextoptionen hinzugefügt, welche mehr Kontrolle über
PFS erlauben und eventuell auftretende Kompatibilitätsprobleme behandeln.
-
ecdh_curve
-
Diese Option erlaubt die Auswahl einer spezifischen Kurve für
ECDH-Chiffren. Falls nicht angegeben, wird prime256v1
verwendet.
-
dh_param
-
Pfad zu einer Datei, welche Parameter für den
Diffie-Hellman-Schlüsselaustausch enthält, die beispielsweise
durch folgenden Befehl erzeugt werden könnte:
openssl dhparam -out /path/to/my/certs/dh-2048.pem 2048
-
single_dh_use
-
Ist dies auf true
gesetzt, wird ein neues Schlüsselpaar erzeugt,
wenn Diffie-Hellman-Parameter verwendet werden, wodurch sich die
Forward Secrecy verbessert.
-
single_ecdh_use
-
Ist dies auf true
gesetzt, wird immer ein neues Schlüsselpaar erzeugt,
wenn ECDH-Chiffren ausgehandelt werden. Dies verbessert die
Forward Secrecy.
SSL/TLS Versionsauswahl
Es ist nun möglich die spezifischen Versionen von SSL oder TLS mittels
der SSL-Kontextoption crypto_method
oder durch
die Angabe eines spezifischen Transportes bei der Erzeugung des
Streamwrappers auszuwählen (beispielsweise durch den Aufruf von
stream_socket_client() oder
stream_socket_server()).
Die SSL-Kontextoption crypto_method
erwartet
eine Bitmaske in der die erlaubten Protokolle aufgezählt sind.
Der Parameter crypto_type
von
stream_socket_enable_crypto() verhält sich genauso.
Ausgewählte Protokollversionen und zugehörige Optionen
Protokoll(e) |
Client-Flag |
Server-Flag |
Transport |
---|
Beliebige Version von TLS oder SSL |
STREAM_CRYPTO_METHOD_ANY_CLIENT |
STREAM_CRYPTO_METHOD_ANY_SERVER |
ssl:// |
Beliebige TLS-Version |
STREAM_CRYPTO_METHOD_TLS_CLIENT |
STREAM_CRYPTO_METHOD_TLS_SERVER |
tls:// |
TLS 1.0 |
STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT |
STREAM_CRYPTO_METHOD_TLSv1_0_SERVER |
tlsv1.0:// |
TLS 1.1 |
STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT |
STREAM_CRYPTO_METHOD_TLSv1_1_SERVER |
tlsv1.1:// |
TLS 1.2 |
STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT |
STREAM_CRYPTO_METHOD_TLSv1_2_SERVER |
tlsv1.2:// |
SSL 3 |
STREAM_CRYPTO_METHOD_SSLv3_CLIENT |
STREAM_CRYPTO_METHOD_SSLv3_SERVER |
sslv3:// |
Die Funktion openssl_get_cert_locations() wurde
hinzugefügt: Sie gibt den Standard-Ablageort aus, der von PHP bei der
Suche von CA-Bundles verwendet wird.
SPKI-Unterstützung
Unterstützung für die Erzeugung, das Auslesen und das Verifizieren von
Signed Public Key And Challenges wurde (SPKAC) wurde hinzugefügt.
Die Funktionen openssl_spki_new(),
openssl_spki_verify(),
openssl_spki_export_challenge() und
openssl_spki_export() wurden hinzugefügt, welche
die durch ein KeyGen
HTML5-Element erzeugten SPKACs
erzeugen, verifizieren oder den PEM Public Key und
zugehörige Challenge exportieren.
-
openssl_spki_new
-
Erzeugt ein neues SPKAC mit einem privaten Schlüssel, Challenge-String
und Hashalgorithmus.
-
openssl_spki_verify
-
Verifiziert ein angegebenes SPKAC.
-
openssl_spki_export_challenge
-
Exportiert eine zugehörige Challenge eines angegebenen SPKAC.
-
openssl_spki_export
-
Exportiert den PEM-formatierten öffentlichen
RSA-Schlüssel aus einer SPKAC.