PHP 5.4.33 Released

Options de contexte SSL

Options de contexte SSLListe des options de contexte SSL

Description

Options de contexte pour les protocoles ssl:// et tls://.

Options

peer_name string

Nom de paires à utiliser. Si cette valeur n'est pas définie, alors le nom sera deviné en se basant sur le nom d'hôte utilisé lors de l'ouverture du flux.

verify_peer booléen

Nécessite une vérification du certificat SSL utilisé.

Par défaut, vaut TRUE.

verify_peer_name boolean

Nécessite la vérification du nom de paires.

Par défaut, vaut TRUE.

allow_self_signed booléen

Permet les certificats autosignés. Requière le paramètre verify_peer.

Par défaut, vaut FALSE

cafile string

Endroit où se trouve le fichier de l'autorité du certificat sur le système de fichiers local et qui devra être utilisé avec l'option de contexte verify_peer pour identifier le pair distant.

capath string

Si cafile n'est pas spécifié ou si le certificat n'a pas été trouvé, une recherche dans le dossier pointé par capath sera effectuée afin d'y trouver un certificat valide. capath doit être un dossier de certificat valide.

local_cert string

Chemin vers le certificat local, sur le système de fichiers. Ce doit être un fichier encodé PEM qui contient votre certificat et votre clé privée. Il peut, optionnellement, contenir la chaîne de certification de l'émetteur.

passphrase string

La phrase passe avec laquelle votre fichier local_cert a été encodé.

CN_match string

Nom commun attendu. PHP effectuera un nombre limité de recherches sur les jokers. Si le nom commun ne correspond pas à celui-là, la connexion échouera.

Note: Cette option est obsolète en faveur de peer_name, depuis PHP 5.6.0.

verify_depth integer

Échoue si la chaîne de certification est trop profonde.

Par défaut, aucune vérification.

ciphers string

Définit la liste des chiffrements. Le format de la chaîne est décrite sur la page » ciphers(1).

Par défaut, vaut DEFAULT.

capture_peer_cert boolean

Si définit à TRUE, un option de contexte peer_certificate sera créée, contenant le certificat de l'émetteur.

capture_peer_cert_chain boolean

Si définit à TRUE, une option de contexte peer_certificate_chain sera créée, contenant la chaîne de certification.

SNI_enabled boolean

Si vaut TRUE, l'indication sur le nom du serveur sera activée. Le fait d'activer SNI permet d'utiliser plusieurs certificats sur la même adresse IP.

SNI_server_name string

Si définie, alors cette valeur sera utilisée comme nom dans l'indication sur le nom du serveur. Si cette valeur n'est pas définie, alors le nom du serveur sera déduit par rapport au nom de l'hôte utilisé lors de l'ouverture du flux.

Note: Cette option est obsolète en faveur de peer_name, depuis PHP 5.6.0.

disable_compression boolean

Si défini, la compression TLS sera désactivée. Cela peut aider à mitiger le vecteur d'attaque CRIME.

peer_fingerprint string | array

Stop lorsque le certificat digest distant ne correspond pas au hash spécifié.

Lorsqu'une chaîne de caractères est utilisée, la longueur va déterminer l'algorithme de hashage utilisé, soit "md5" (32), soit "sha1" (40).

Lorsqu'un tableau est utilisé, la clé indique le nom de l'algorithme de hashage, et chaque valeur correspondante représente le digest attendu.

Historique

Version Description
5.6.0 Ajout des paramètres peer_fingerprint et verify_peer_name. La valeur par défaut de verify_peer change en TRUE.
5.4.13 Ajout du paramètre disable_compression. Requiert OpenSSL >= 1.0.0.
5.3.2 Ajout de SNI_enabled et de SNI_server_name.
5.0.0 Ajout des paramètres capture_peer_cert, capture_peer_chain et ciphers.

Notes

Note: Vu que ssl:// est un protocole sous-jacent pour les gestionnaires https:// et ftps://, toutes les options de contexte appliquées à ssl:// seront également appliquées à https:// et ftps://.

Note: Afin que SNI (Server Name Indication) soit disponible, PHP doit être compilé avec OpenSSL 0.9.8j ou supérieur. Utilisez la constante OPENSSL_TLSEXT_SERVER_NAME pour déterminer si SNI est supporté ou non.

add a note add a note

User Contributed Notes 3 notes

up
1
Anonymous
4 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
7 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