OpenSSL промени во PHP 5.6.x
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
OpenSSL промени во PHP 5.6.x
Референца за `migration56.openssl.php` со подобрена типографија и навигација.
OpenSSL промени во PHP 5.6.x
: валиден JSON влез не е засегнат и ќе продолжи да се анализира нормално.
Stream wrappers сега проверуваат сертификати на партнерот и имиња на хостови по дифолт кога се користи SSL/TLS
Сите шифрирани клиентски потоци сега овозможуваат проверка на партнерот по дифолт. По дифолт, ова ќе го користи стандардниот CA пакет на OpenSSL за да го провери сертификатот на партнерот. Во повеќето случаи, нема да бидат потребни промени за комуникација со сервери со валидни SSL сертификати, бидејќи дистрибутерите генерално ги конфигурираат OpenSSL да користат познати добри CA пакети.
cafile or
capath
Стандардниот CA пакет може да се надмине на глобално ниво со поставување на поставката за конфигурација openssl.cafile или openssl.capath, или на барање со користење на
опции за контекст.
verify_peer
Иако генерално не се препорачува, можно е да се оневозможи проверката на сертификатот на партнерот за барање со поставување на falseопција за контекст на verify_peer_name
Иако генерално не се препорачува, можно е да се оневозможи проверката на сертификатот на партнерот за барање со поставување на false.
Отпечатоци од сертификат
Додадена е поддршка за извлекување и верификација на отпечатоци од сертификат. openssl_x509_fingerprint() е додадено за извлекување отпечаток од X.509 сертификат, и две
SSL контекст на стрим опции се додадени: capture_peer_cert за фаќање на X.509 сертификатот на партнерот, и peer_fingerprint за да се потврди дека сертификатот на партнерот треба да одговара на дадениот отпечаток.
Стандардни шифри ажурирани
Стандардните шифри што ги користи PHP се ажурирани на посигурна листа базирана на » Препораки за шифри на Mozilla, со две дополнителни исклучоци: анонимни Diffie-Hellman шифри и RC4.
До оваа листа може да се пристапи преку новата
OPENSSL_DEFAULT_STREAM_CIPHERS константа, и може да се презапише (како во претходните PHP верзии) со поставување на
ciphers
опција за контекст.
Компресија оневозможена по стандард
SSL/TLS компресијата е оневозможена по стандард за да се ублажи нападот CRIME. PHP 5.4.13 додаде
disable_compression
опција за контекст за да се овозможи оневозможување на компресијата: ова сега е поставено на
true (односно, компресијата е оневозможена) по стандард.
Дозволи серверите да го претпочитаат својот редослед на шифри
На honor_cipher_order Додадена е опција за SSL контекст за да им овозможи на серверите за шифрирани стримови да ги ублажат BEAST ранливостите со претпочитање на шифрите на серверот пред оние на клиентот.
Пристап до договорениот протокол и шифра
До протоколот и шифрата што беа договорени за шифриран стрим сега може да се пристапи преку stream_get_meta_data() or
stream_context_get_options() кога
capture_session_meta SSL контекст опцијата е поставена на
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);
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
array(4) {
["protocol"]=>
string(5) "TLSv1"
["cipher_name"]=>
string(20) "ECDHE-RSA-AES128-SHA"
["cipher_bits"]=>
int(128)
["cipher_version"]=>
string(11) "TLSv1/SSLv3"
}
Нови опции за совршена тајност напред во шифрирани стрим сервери
Шифрираните клиентски стримови веќе поддржуваат совршена тајност напред, бидејќи генерално се контролираат од серверот. PHP шифрираните серверски стримови што користат сертификати способни за совршена тајност напред не треба да преземаат никакви дополнителни дејства за да овозможат PFS; сепак, додадени се голем број нови опции за SSL контекст за да се овозможи поголема контрола над PFS и да се справи со какви било проблеми со компатибилност што може да се појават.
ecdh_curve-
Оваа опција овозможува избор на специфична крива за употреба со ECDH шифри. Ако не е наведено,
prime256v1ќе се користи. dh_param-
Патека до датотека што содржи параметри за размена на клучеви Diffie-Hellman, како што е создадена со следнава команда:
openssl dhparam -out /path/to/my/certs/dh-2048.pem 2048
single_dh_use-
Ако е поставено на
true, нов пар клучеви ќе биде креиран при користење на параметри Diffie-Hellman, со што се подобрува тајноста напред. single_ecdh_use-
Ако е поставено на
true, нов пар клучеви секогаш ќе се генерира кога ќе се преговараат ECDH шифри. Ова ја подобрува тајноста напред.
Избор на SSL/TLS верзија
Сега е можно да се изберат специфични верзии на SSL и TLS преку
crypto_method SSL контекст опција или со специфицирање на специфичен транспорт при креирање на обвивка за стрим (на пример, со повикување
stream_socket_client() or
stream_socket_server()).
На crypto_method SSL контекст опција прифаќа битно маскирање што ги набројува дозволените протоколи, како што прави
crypto_type of
stream_socket_enable_crypto().
| Протокол(и) | Клиентско знаменце | Серверско знаменце | Транспорт |
|---|---|---|---|
| Било која TLS или SSL верзија | STREAM_CRYPTO_METHOD_ANY_CLIENT |
STREAM_CRYPTO_METHOD_ANY_SERVER |
ssl:// |
| Било која 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
// Requiring TLS 1.0 or better when using file_get_contents():
$ctx = stream_context_create([
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT,
],
]);
$html = file_get_contents('https://google.com/', false, $ctx);
// Requiring TLS 1.1 or 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);
// Connecting using the tlsv1.2:// stream socket transport.
$sock = stream_socket_client('tlsv1.2://google.com:443/');
?>openssl_get_cert_locations() added
На openssl_get_cert_locations() function has been added: it returns the default locations PHP will search when looking for CA bundles.
<?php
var_dump(openssl_get_cert_locations());
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
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) ""
}
SPKI support
Support has been added for generating, extracting and verifying signed public key and challenges (SPKAC). openssl_spki_new(),
openssl_spki_verify(),
openssl_spki_export_challenge()Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во
openssl_spki_export() have been added to create, verify export PEM public key and associated challenge from SPKAC's generated from a KeyGen HTML5 element.
openssl_spki_new-
Generates a new SPKAC using private key, challenge string and hashing algorithm.
<?php
$pkey = openssl_pkey_new();
openssl_pkey_export($pkey, 'secret passphrase');
$spkac = openssl_spki_new($pkey, 'challenge string');
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
SPKAC=MIIBXjCByDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3L0IfUijj7+A8CPC8EmhcdNoe5fUAog7OrBdhn7EkxFButUp40P7+LiYiygYG1TmoI/a5EgsLU3s9twEz3hmgY9mYIqb/rb+SF8qlD/K6KVyUORC7Wlz1Df4L8O3DuRGzx6/+3jIW6cPBpfgH1sVuYS1vDBsP/gMMIxwTsKJ4P0CAwEAARYkYjViMzYxMTktNjY5YS00ZDljLWEyYzctMGZjNGFhMjVlMmE2MA0GCSqGSIb3DQEBAwUAA4GBAF7hu0ifzmjonhAak2FhhBRsKFDzXdKIkrWxVNe8e0bZzMrWOxFM/rqBgeH3/gtOUDRS5Fnzyq425UsTYbjfiKzxGeCYCQJb1KJ2V5Ij/mIJHZr53WYEXHQTNMGR8RPm7IxwVXVSHIgAfXsXZ9IXNbFbcaLRiSTr9/N4U+MXUWL7
openssl_spki_verify-
Verifies provided SPKAC.
<?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-
Exports associated challenge from provided SPKAC.
<?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;
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
challenge string
openssl_spki_export-
Ги извезува PEM formatted RSA public key from SPKAC.
<?php
$pkey = openssl_pkey_new();
openssl_pkey_export($pkey, 'secret passphrase');
$spkac = openssl_spki_new($pkey, 'challenge string');
echo openssl_spki_export($spkac);
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcvQh9SKOPv4DwI8LwSaFx02h7 l9QCiDs6sF2GfsSTEUG61SnjQ/v4uJiLKBgbVOagj9rkSCwtTez23ATPeGaBj2Zg ipv+tv5IXyqUP8ropXJQ5ELtbXPUN/gvw7cO5EbPHr/7eMhbpw8Gl+AfWxW5hLW8 MGw/+AwwjHBOwong/QIDAQAB -----END PUBLIC KEY-----