ΠΡΠ΅ ΡΠΈΡΡΡΠ΅ΠΌΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΏΠΈΡΠΎΠ². ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΏΠΈΡΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ OpenSSL CA. ΠΠ±ΡΡΠ½ΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π΄Π΅Π»Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ SSL-ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ OpenSSL Π½Π°ΡΡΡΠΎΠ΅Π½ ΡΠ°ΠΊ, ΡΡΠΎ ΡΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Ρ ΠΎΡΠΎΡΠΈΠΌΠΈ CA-ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ CA ΠΏΠ°ΠΊΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ openssl.cafile ΠΈΠ»ΠΈ openssl.capath ΡΡΡΠΎΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ,
ΠΈΠ»ΠΈ ΠΆΠ΅ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠΏΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°
cafile ΠΈΠ»ΠΈ
capath.
Π₯ΠΎΡΡ ΡΡΠΎ ΠΈ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° ΠΏΠΈΡΠ°
Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ°, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² verify_peer
ΠΎΠΏΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π² false, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΈΡΠ°, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ²
verify_peer_name Π² false.
ΠΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°.
ΠΠ»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°ΡΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ² X.509 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ
openssl_x509_fingerprint(). Π’Π°ΠΊΠΆΠ΅ Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π΄Π²Π΅
ΠΎΠΏΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΠΎΡΠΎΠΊΠ° SSL:
capture_peer_cert Π΄Π»Ρ Π·Π°Ρ
Π²Π°ΡΠ° ΡΠ·Π»ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° X.509,
ΠΈ peer_fingerprint Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅
Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠΈΠ³Π½Π°ΡΡΡΠ΅.
Π‘ΠΏΠΈΡΠΎΠΊ ΡΠΈΡΡΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ PHP, Π±ΡΠ» ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Β»Β ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΈΡΡΠ°ΠΌ ΠΎΡ Mozilla, Ρ Π΄Π²ΡΠΌΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ: Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΡΠΈΡΡΡ ΠΠΈΡΡΠΈ-Π₯Π΅Π»Π»ΠΌΠ°Π½Π° ΠΈ RC4.
ΠΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠ΅ΡΠ΅Π· Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
OPENSSL_DEFAULT_STREAM_CIPHERS, ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½
(ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
Π²Π΅ΡΡΠΈΡΡ
PHP) ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΎΠΏΡΠΈΠ΅ΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°
ciphers.
Π‘ΠΆΠ°ΡΠΈΠ΅ SSL/TLS Π±ΡΠ»ΠΎ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ compression ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ
Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ Π°ΡΠ°ΠΊΠΈ ΡΠΈΠΏΠ° CRIME. Π PHP 5.4.13 Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΎΠΏΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°
disable_compression
Π΄Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΠΊΠΎΠΌΠΏΡΠ΅ΡΡΠΈΡ ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°
ΠΊΠ°ΠΊ true (ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΡΠ΅ΡΡΠΈΡ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Π°).
ΠΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΎΠΏΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° honor_cipher_order,
ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠ΅ΠΌΡ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠ°ΠΌΠΎΠΌΡ
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠΈΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΡΠ½ΠΈΠ·ΠΈΡΡ
ΡΠΈΡΠΊ Π°ΡΠ°ΠΊΠΈ ΡΠΈΠΏΠ° BEAST.
ΠΡΠΎΡΠΎΠΊΠΎΠ» ΠΈ ΡΠΈΡΡ, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, Π΄ΠΎΡΡΡΠΏΠ½Ρ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ stream_get_meta_data() ΠΈΠ»ΠΈ
stream_context_get_options(), Π΅ΡΠ»ΠΈ ΠΎΠΏΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° SSL
capture_session_meta ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΠΊΠ°ΠΊ 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);
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
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ΠΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΠΠΈΡΡΠΈ-Π₯Π΅Π»Π»ΠΌΠ°Π½Π°, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
openssl dhparam -out /path/to/my/certs/dh-2048.pem 2048
single_dh_use
ΠΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ true, Π½ΠΎΠ²Π°Ρ ΠΏΠ°ΡΠ° ΠΊΠ»ΡΡΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΠΈΡΡΠΈ-Π₯Π΅Π»Π»ΠΌΠ°Π½Π°, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠ»ΡΡΡΠ°Ρ ΠΏΡΡΠΌΡΡ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΠΎΡΡΡ.
single_ecdh_use
ΠΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ true, Π½ΠΎΠ²Π°Ρ ΠΏΠ°ΡΠ° ΠΊΠ»ΡΡΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π²ΡΠ΅Π³Π΄Π°,
ΠΏΡΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΈΡΡΠ° ECDH. ΠΡΠΎ ΡΠ»ΡΡΡΠ°Π΅Ρ ΠΏΡΡΠΌΡΡ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΠΎΡΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ SSL ΠΈ TLS Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΡΠΈΠΈ
ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° crypto_method ΠΈΠ»ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ
ΡΡΠ°Π½ΡΠΏΠΎΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΡΡΠΊΠΈ ΠΏΠΎΡΠΎΠΊΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π°
stream_socket_client() ΠΈΠ»ΠΈ
stream_socket_server()).
ΠΠΏΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° SSL crypto_method ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π±ΠΈΡΠΎΠ²ΡΡ
ΠΌΠ°ΡΠΊΡ, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ, ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΡΡΠΎ Π·Π°Π΄Π°ΡΡΡΡ Π²
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ crypto_type ΡΡΠ½ΠΊΡΠΈΠΈ
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
// Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ TLS 1.0 ΠΈΠ»ΠΈ Π²ΡΡΠ΅ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ file_get_contents():
$ctx = stream_context_create([
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT,
],
]);
$html = file_get_contents('https://google.com/', false, $ctx);
// Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ TLS 1.1 ΠΈΠ»ΠΈ 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);
// Π‘ΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° tlsv1.2://
$sock = stream_socket_client('tlsv1.2://google.com:443/');
?>ΠΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ openssl_get_cert_locations(): ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΡΡ PHP Π±ΡΠ΄Π΅Ρ ΠΈΡΠΊΠ°ΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ CA ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
<?php
var_dump(openssl_get_cert_locations());
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
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) ""
}
ΠΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ, ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡΡ
ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ
ΠΊΠ»ΡΡΠ΅ΠΉ ΠΈ ΠΎΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»ΡΠ½ΡΡ
ΡΡΡΠΎΠΊ (SPKAC).
ΠΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ openssl_spki_new(),
openssl_spki_verify(),
openssl_spki_export_challenge() ΠΈ
openssl_spki_export() Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΊΡΠΏΠΎΡΡΠ° PEM
ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ
ΠΊΠ»ΡΡΠ΅ΠΉ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ
ΠΎΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»ΡΠ½ΡΡ
ΡΡΡΠΎΠΊ ΠΈΠ· SPKAC,
ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ
ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² HTML5 KeyGen.
openssl_spki_newΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ SPKAC Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°, ΠΎΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
<?php
$pkey = openssl_pkey_new();
openssl_pkey_export($pkey, 'secret passphrase');
$spkac = openssl_spki_new($pkey, 'challenge string');
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
SPKAC=MIIBXjCByDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3L0IfUijj7+A8CPC8EmhcdNoe5fUAog7OrBdhn7EkxFButUp40P7+LiYiygYG1TmoI/a5EgsLU3s9twEz3hmgY9mYIqb/rb+SF8qlD/K6KVyUORC7Wlz1Df4L8O3DuRGzx6/+3jIW6cPBpfgH1sVuYS1vDBsP/gMMIxwTsKJ4P0CAwEAARYkYjViMzYxMTktNjY5YS00ZDljLWEyYzctMGZjNGFhMjVlMmE2MA0GCSqGSIb3DQEBAwUAA4GBAF7hu0ifzmjonhAak2FhhBRsKFDzXdKIkrWxVNe8e0bZzMrWOxFM/rqBgeH3/gtOUDRS5Fnzyq425UsTYbjfiKzxGeCYCQJb1KJ2V5Ij/mIJHZr53WYEXHQTNMGR8RPm7IxwVXVSHIgAfXsXZ9IXNbFbcaLRiSTr9/N4U+MXUWL7
openssl_spki_verifyΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ 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ΠΠΊΡΠΏΠΎΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ ΠΎΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈΠ· ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ 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;
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
challenge string
openssl_spki_exportΠΠΊΡΠΏΠΎΡΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° (PEM) RSA Π² ΡΠΎΡΠΌΠ°ΡΠ΅ ΠΈΠ· SPKAC.
<?php
$pkey = openssl_pkey_new();
openssl_pkey_export($pkey, 'secret passphrase');
$spkac = openssl_spki_new($pkey, 'challenge string');
echo openssl_spki_export($spkac);
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcvQh9SKOPv4DwI8LwSaFx02h7 l9QCiDs6sF2GfsSTEUG61SnjQ/v4uJiLKBgbVOagj9rkSCwtTez23ATPeGaBj2Zg ipv+tv5IXyqUP8ropXJQ5ELtbXPUN/gvw7cO5EbPHr/7eMhbpw8Gl+AfWxW5hLW8 MGw/+AwwjHBOwong/QIDAQAB -----END PUBLIC KEY-----