PHP Unconference Europe 2015

SSL-Kontext-Optionen

SSL-Kontext-OptionenAuflistung der Optionen für SSL-Kontexte

Beschreibung

Kontextoptionen für die ssl:// und tls:// Übermittlung.

Optionen

verify_peer boolean

Verifizierung des verwendeten SSL-Zertifikats voraussetzen.

Standardmäßig FALSE.

allow_self_signed boolean

Selbst signierte Zerifikate erlauben. Setzt verify_peer voraus.

Standardmäßig FALSE

cafile string

Speicherort der Datei der Zertifizierungsstelle (CA) auf dem lokalen Dateisystem, welche im Zusammenhang mit der verify_peer -Option verwendet werden soll, um die Identität der Gegenstelle zu authentifizieren.

capath string

Falls cafile nicht angegeben wurde oder dort das Zertifikat nicht gefunden wurde, so wird das durch capath angegebene Verzeichnis nach einem passenden Zertifikat durchsucht. capath muss ein korrekt gehashtes Zertifikatsverzeichnis sein.

local_cert string

Pfad zur lokalen Zertifikatsdatei im Dateisystem. Dies muss eine im PEM-Format gespeicherte Datei sein welche das Zertifikat und den privaten Schlüssel enthält. Optional kann dies die Kette an Herausgeberzertifikaten enthalten.

passphrase string

Passphrase mit der die local_cert-Datei gespeichert wurde.

CN_match string

Der erwartete Common Name. PHP wird eine eingeschränkte Prüfung auf Wildcards vornehmen. Wenn der Common Name nicht diesem Wert entspricht, so wird der Verbindungsaufbau fehlschlagen.

verify_depth integer

Abbruch, wenn die Zertifikatskette zu tief ist.

Standardmäßig keine Prüfung.

ciphers string

Setzt die Liste der verfügbaren Verschlüsselungsalgorithmen. Das Format dieser Zeichenkette wird in » ciphers(1) beschrieben.

Standardmäßig auf DEFAULT gesetzt

capture_peer_cert boolean

Falls dies auf TRUE gesetzt ist, so wird die Kontextoption peer_certificate angelegt, welche das Zertifikat der Gegenstelle enthält.

capture_peer_cert_chain boolean

Falls dies auf TRUE gesetzt ist, so wird die Kontextoption peer_certificate_chain angelegt, welche die Zertifikatskette enthält.

SNI_enabled boolean

Falls dies auf TRUE gesetzt wird, so wird Server Name Indication eingeschaltet. Die Verwendung von SNI erlaubt die Benutzung von mehreren Zertifikaten unter der gleichen IP-Adresse.

SNI_server_name string

Ist dies gesetzt, so wird der angegebene Wert als der Servername für die Server Name Indication verwendet. Ist dieser Wert nicht angegeben, so wird der Server Name anhand des Hostnamens beim Öffnen des Streams geraten.

disable_compression boolean

Wenn dies gesetzt wird, so wird TLS-Komprimierung ausgeschaltet. Dies kann den Angriffsvektor für CRIME-Angriffe umgehen.

Changelog

Version Beschreibung
5.4.13 disable_compression hinzugefügt. Benötigt OpenSSL >= 1.0.0.
5.3.2 SNI_enabled und SNI_server_name hinzugefügt.
5.0.0 capture_peer_cert, capture_peer_chain und ciphers hinzugefügt.

Anmerkungen

Hinweis: Weil ssl:// die den Wrappern https:// und ftps:// zugrunde liegende Übertragungsschicht ist, können alle Optionen die für ssl:// verwendet werden können ebenfalls bei https:// und ftps:// angewendet werden.

Hinweis: Damit SNI (Server Name Indication) verfügbar ist muss PHP mit OpenSSL 0.9.8j oder neuer kompiliert sein. Die Konstante OPENSSL_TLSEXT_SERVER_NAME kann zur Prüfung, ob SNI verfügbar ist, herangezogen werden.

add a note add a note

User Contributed Notes 3 notes

up
1
Anonymous
5 months ago
If I read the UPGRADING file correctly, in PHP 5.6 the default value of verify_peer has changed.
up
0
borbas dot geri at gmail dot com
8 months ago
I used this for Apple Push Notification Service.
Passed in a local certificate filename `cert.pem` trough local_cert option.
Worked fine, when invoked the script directly.

But when I included/required the script from a different location, it stopped working, without any explicit error message.

Resolved by passed in the full path for the file `<FullPathTo>cert.pem`.
up
0
Botjan kufca
4 years ago
CN_match works contrary to intuitive thinking. I came across this when I was developing SSL server implemented in PHP. I stated (in code):

- do not allow self signed certs (works)
- verify peer certs against CA cert (works)
- verify the client's CN against CN_match (does not work), like this:

stream_context_set_option($context, 'ssl', 'CN_match', '*.example.org');

I presumed this would match any client with CN below .example.org domain.
Unfortunately this is NOT the case. The option above does not do that.

What it really does is this:
- it takes client's CN and compares it to CN_match
- IF CLIENT's CN CONTAINS AN ASTERISK like *.example.org, then it is matched against CN_match in wildcard matching fashion

Examples to illustrate behaviour:
(CNM = server's CN_match)
(CCN = client's CN)

- CNM=host.example.org, CCN=host.example.org ---> OK
- CNM=host.example.org, CCN=*.example.org ---> OK
- CNM=.example.org, CCN=*.example.org ---> OK
- CNM=example.org, CCN=*.example.org ---> ERROR

- CNM=*.example.org, CCN=host.example.org ---> ERROR
- CNM=*.example.org, CCN=*.example.org ---> OK

According to PHP sources I believe that the same applies if you are trying to act as Client and the server contains a wildcard certificate. If you set CN_match to myserver.example.org and server presents itself with *.example.org, the connection is allowed.

Everything above applies to PHP version 5.2.12.
I will supply a patch to support CN_match starting with asterisk.
To Top