Changement pour OpenSSL dans PHP 5.6.x
Les wrappers de flux vérifient désormais les certificats d'homologue et les noms d'hôte par défaut lors de l'utilisation de SSL/TLS
Tous les flux clients cryptés activent désormais la vérification par paire par défaut. Par défaut, ceci va utiliser le CA OpenSSL par défaut pour vérifier la paire de certificat. Dans la plupart des cas, aucune modification n'a besoin d'être faite pour communiquer avec des serveurs et des certificats SSL valides, sachant que les distributeurs configurent généralement OpenSSL pour utiliser les CA connus.
Le CA par défaut peut être écrasé sur une base globale en utilisant les
options de configuration openssl.cafile ou openssl.capath, ou via une requête
basique en utilisant les options de contexte
cafile
ou
capath
.
Bien que ce ne soit pas conseillé en général, il est possible de désactiver la
vérification de certificats par paire pour une requête en définissant l'option
de contexte verify_peer
à FALSE
, et pour désactiver la validation du nom des paires, en configurant
l'option de contexte
verify_peer_name
à FALSE
.
Empreintes digitales de certificat
Le support a été ajouté pour extraire et vérifier les empreintes digitales des certificats. openssl_x509_fingerprint() a été ajouté pour extraire une empreinte digitale d'un certificat X.509 et deux options de contexte de flux SSL ont été ajoutées: capture_peer_cert pour capturer le certificat X.509 de l'homologue et peer_fingerprint pour certifier que le certificat de l'homologue doit correspondre à l'empreinte digitale donnée.
Chiffrements par défaut mis à jour
Les chiffrements par défaut utilisés par PHP ont été mis à jour vers une liste plus sécurisée basée sur les » recommandations de chiffrement de Mozilla, avec deux exclusions supplémentaires: chiffrements Diffie-Hellman anonymes et RC4.
Cette liste est accessible via la nouvelle constante
OPENSSL_DEFAULT_STREAM_CIPHERS
et peut être remplacée
(comme dans les versions précédentes de PHP) en définissant l'option de contexte
chiffrements
.
Compression désactivée par défaut
La compression SSL/TLS a été désactivée par défaut pour atténuer l'attaque CRIME.
PHP 5.4.13 a ajouté une option de contexte
disable_compression
pour permettre à la compression d'être désactivée: elle est maintenant définie
à TRUE
(c'est-à-dire que la compression est désactivée) par défaut.
Autoriser les serveurs à préférer leur ordre de chiffrement
L'option de contexte SSL honor_cipher_order
a été
ajoutée pour permettre aux serveurs de flux chiffrés d'atténuer les
vulnérabilités de BEAST en préférant les chiffrements du serveur au client.
Accéder au protocole négocié et au chiffrement
Le protocole et le chiffrement qui ont été négociés pour un flux chiffré
peuvent désormais être accédé via stream_get_meta_data()
ou stream_context_get_options() lorsque l'option de
contexte SSL capture_session_meta
est définie à TRUE
.
<?php
$ctx = stream_context_create(['ssl' => [
'capture_session_meta' => TRUE
]]);
$html = file_get_contents('https://google.com/', FALSE, $ctx);
$meta = stream_context_get_options($ctx)['ssl']['session_meta'];
var_dump($meta);
?>
L'exemple ci-dessus va afficher :
array(4) { ["protocol"]=> string(5) "TLSv1" ["cipher_name"]=> string(20) "ECDHE-RSA-AES128-SHA" ["cipher_bits"]=> int(128) ["cipher_version"]=> string(11) "TLSv1/SSLv3" }
De nouvelles options pour la confidentialité persistante sur les serveurs de flux chiffrés
Les flux de clients chiffrés prennent déjà en charge la confidentialité persistante, car il est généralement contrôlé par le serveur. Les flux de serveurs chiffrés en PHP à l'aide de certificats capables d'une confidentialité persistante n'ont pas besoin de prendre d'autres mesures pour activer PFS; Toutefois, un certain nombre de nouvelles options de contexte SSL ont été ajoutées pour permettre un plus grand contrôle sur PFS et traiter les problèmes de compatibilité qui peuvent survenir.
-
ecdh_curve
-
Cette option permet de sélectionner une courbe spécifique à utiliser avec les chiffrements ECDH. S'il n'est pas spécifié, prime256v1 sera utilisé.
-
dh_param
-
Chemin d'accès à un fichier contenant des paramètres pour l'échange de clés Diffie-Hellman, tel que celui créé par la commande suivante :
openssl dhparam -out /path/to/my/certs/dh-2048.pem 2048
-
single_dh_use
-
Si définie à
TRUE
, une nouvelle paire de clés sera créée lors de l'utilisation des paramètres Diffie-Hellman, améliorant ainsi la confidentialité persistante. -
single_ecdh_use
-
Si définie à
TRUE
, une nouvelle paire de clés sera toujours générée lors de la négociation des suites de chiffrement ECDH. Cela améliore la confidentialité persistante.
Sélection de la version SSL/TLS
Il est désormais possible de sélectionner des versions spécifiques de SSL et
TLS via l'option de contexte SSL crypto_method
ou en
spécifiant un transport spécifique lors de la création d'un wrapper de flux
(par exemple, en appelant stream_socket_client() ou
stream_socket_ serveur()).
L'option de contexte SSL crypto_method
accepte un masque
de bits énumérant les protocoles qui sont autorisés, comme le fait le
crypto_type
de stream_socket_enable_crypto().
Pprotocole(s) | Drapeau client | Drapeau serveur | Transport |
---|---|---|---|
Toute version TLS ou SSL | STREAM_CRYPTO_METHOD_ANY_CLIENT |
STREAM_CRYPTO_METHOD_ANY_SERVER |
ssl:// |
Toute version TLS | 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:// |
<?php
// Nécessitant TLS 1.0 ou mieux lors de l'utilisation de file_get_contents():
$ctx = stream_context_create([
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT,
],
]);
$html = file_get_contents('https://google.com/', false, $ctx);
// Nécessitant TLS 1.1 ou 1.2:
$ctx = stream_context_create([
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT |
STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
],
]);
$html = file_get_contents('https://google.com/', false, $ctx);
// Connexion à l'aide du transport de socket tlsv1.2://.
$sock = stream_socket_client('tlsv1.2://google.com:443/');
?>
Ajout de openssl_get_cert_locations()
La fonction openssl_get_cert_locations() a été ajoutée : elle renvoie les emplacements par défaut que PHP recherchera lors de la recherche de paquets CA.
<?php
var_dump(openssl_get_cert_locations());
?>
L'exemple ci-dessus va afficher :
array(8) { ["default_cert_file"]=> string(21) "/etc/pki/tls/cert.pem" ["default_cert_file_env"]=> string(13) "SSL_CERT_FILE" ["default_cert_dir"]=> string(18) "/etc/pki/tls/certs" ["default_cert_dir_env"]=> string(12) "SSL_CERT_DIR" ["default_private_dir"]=> string(20) "/etc/pki/tls/private" ["default_default_cert_area"]=> string(12) "/etc/pki/tls" ["ini_cafile"]=> string(0) "" ["ini_capath"]=> string(0) "" }
Support de SPKI
Le support a été ajouté pour générer, extraire et vérifier les clés et les défis publics signés (SPKAC). openssl_spki_new(), openssl_spki_verify(), openssl_spki_export_challenge() et openssl_spki_export() ont été ajoutées pour créer, vérifier la clé publique PEM d'exportation et le défi associé de SPKAC générés à partir d'un élément HTML5 KeyGen.
-
openssl_spki_new
-
Génère un nouveau SPKAC en utilisant la clé privée, chaîne de caractères de défi et l'algorithme de hachage.
<?php
$pkey = openssl_pkey_new();
openssl_pkey_export($pkey, 'secret passphrase');
$spkac = openssl_spki_new($pkey, 'challenge string');
?>L'exemple ci-dessus va afficher :
SPKAC=MIIBXjCByDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3L0IfUijj7+A8CPC8EmhcdNoe5fUAog7OrBdhn7EkxFButUp40P7+LiYiygYG1TmoI/a5EgsLU3s9twEz3hmgY9mYIqb/rb+SF8qlD/K6KVyUORC7Wlz1Df4L8O3DuRGzx6/+3jIW6cPBpfgH1sVuYS1vDBsP/gMMIxwTsKJ4P0CAwEAARYkYjViMzYxMTktNjY5YS00ZDljLWEyYzctMGZjNGFhMjVlMmE2MA0GCSqGSIb3DQEBAwUAA4GBAF7hu0ifzmjonhAak2FhhBRsKFDzXdKIkrWxVNe8e0bZzMrWOxFM/rqBgeH3/gtOUDRS5Fnzyq425UsTYbjfiKzxGeCYCQJb1KJ2V5Ij/mIJHZr53WYEXHQTNMGR8RPm7IxwVXVSHIgAfXsXZ9IXNbFbcaLRiSTr9/N4U+MXUWL7
-
openssl_spki_verify
-
Vérifie le SPKAC fourni.
<?php
$pkey = openssl_pkey_new();
openssl_pkey_export($pkey, 'secret passphrase');
$spkac = openssl_spki_new($pkey, 'challenge string');
var_dump(openssl_spki_verify($spkac));
?> -
openssl_spki_export_challenge
-
Exportations du défi associé au SPKAC fourni.
<?php
$pkey = openssl_pkey_new();
openssl_pkey_export($pkey, 'secret passphrase');
$spkac = openssl_spki_new($pkey, 'challenge string');
$challenge = openssl_spki_export_challenge($spkac):
echo $challenge;
?>L'exemple ci-dessus va afficher :
challenge string
-
openssl_spki_export
-
Exporte la clé publique RSA au format PEM du SPAKC.
<?php
$pkey = openssl_pkey_new();
openssl_pkey_export($pkey, 'secret passphrase');
$spkac = openssl_spki_new($pkey, 'challenge string');
echo openssl_spki_export($spkac);
?>L'exemple ci-dessus va afficher :
-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcvQh9SKOPv4DwI8LwSaFx02h7 l9QCiDs6sF2GfsSTEUG61SnjQ/v4uJiLKBgbVOagj9rkSCwtTez23ATPeGaBj2Zg ipv+tv5IXyqUP8ropXJQ5ELtbXPUN/gvw7cO5EbPHr/7eMhbpw8Gl+AfWxW5hLW8 MGw/+AwwjHBOwong/QIDAQAB -----END PUBLIC KEY-----
Version en cache
21/11/2024 23:41:51 Cette version de la page est en cache (à la date du 21/11/2024 23:41:51) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-migration56.openssl.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.