PHP 7.2.0 Release Candidate 4 Released

stream_socket_enable_crypto

(PHP 5 >= 5.1.0, PHP 7)

stream_socket_enable_cryptoBağlı bir soket üzerinde şifrelemeyi açıp kapatır

Açıklama

mixed stream_socket_enable_crypto ( resource $akım , bool $etkin [, int $şifre_türü [, resource $oturum_akımı ]] )

Akım üzerinde şifreleme yapılıp yapılmayacağını belirler.

Şifreleme ile ilgili ayarlar bir kere etkin olunca, etkin değiştirgesine TRUE veya FALSE belirterek devingen olarak şifrelemenin yapılıp yapılmayacağını belirleyebilirsiniz.

Değiştirgeler

akım

Akım özkaynağı.

etkin

TRUE belirtilirse akım üzerinde şifreleme yapılır, FALSE belirtilirse yapılmaz.

şifre_türü

Akım üzerinde etkin kılınacak şifreleme yöntemini belirler. Geçerli yöntemler:

  • STREAM_CRYPTO_METHOD_SSLv2_CLIENT
  • STREAM_CRYPTO_METHOD_SSLv3_CLIENT
  • STREAM_CRYPTO_METHOD_SSLv23_CLIENT
  • STREAM_CRYPTO_METHOD_TLS_CLIENT
  • STREAM_CRYPTO_METHOD_SSLv2_SERVER
  • STREAM_CRYPTO_METHOD_SSLv3_SERVER
  • STREAM_CRYPTO_METHOD_SSLv23_SERVER
  • STREAM_CRYPTO_METHOD_TLS_SERVER

oturum_akımı

oturum_akımı akımındaki ayarlarla akımı tohumlar.

Dönen Değerler

Başarı durumunda TRUE, uzlaşılamazsa FALSE, yeterli veri yoksa ve tekrar denemeniz gerekiyorsa 0 döner (sadece engellenmeyen soketlerde).

Örnekler

Örnek 1 - stream_socket_enable_crypto() örneği

<?php
$fp 
stream_socket_client("tcp://myproto.example.com:31337"$errno$errstr30);
if (!
$fp) {
    die(
"Bağlantı kurulamadı: $errstr ($errno)");
}

/* Oturum açma aşaması için şifrelemeyi etkin kılalım */
stream_socket_enable_crypto($fptrueSTREAM_CRYPTO_METHOD_SSLv23_CLIENT);
fwrite($fp"USER god\r\n");
fwrite($fp"PASS secret\r\n");

/* Artık şifrelemeye ihtiyaç kalmadı */
stream_socket_enable_crypto($fpfalse);

while (
$motd fgets($fp)) {
    echo 
$motd;
}

fclose($fp);
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

add a note add a note

User Contributed Notes 4 notes

up
8
bobe at webnaute dot net
1 year ago
Constants added in PHP 5.6 :

STREAM_CRYPTO_METHOD_ANY_CLIENT
STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT
STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT
STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
STREAM_CRYPTO_METHOD_ANY_SERVER
STREAM_CRYPTO_METHOD_TLSv1_0_SERVER
STREAM_CRYPTO_METHOD_TLSv1_1_SERVER
STREAM_CRYPTO_METHOD_TLSv1_2_SERVER

Now, be careful because since PHP 5.6.7, STREAM_CRYPTO_METHOD_TLS_CLIENT (same for _SERVER) no longer means any tls version but tls 1.0 only (for "backward compatibility"...).

Before PHP 5.6.7 :
STREAM_CRYPTO_METHOD_SSLv23_CLIENT = STREAM_CRYPTO_METHOD_SSLv2_CLIENT|STREAM_CRYPTO_METHOD_SSLv3_CLIENT
STREAM_CRYPTO_METHOD_TLS_CLIENT = STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT|STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT|STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT

PHP >= 5.6.7
STREAM_CRYPTO_METHOD_SSLv23_CLIENT = STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT|STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT|STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
STREAM_CRYPTO_METHOD_TLS_CLIENT = STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT

PHP bug : https://bugs.php.net/bug.php?id=69195
Commit : https://github.com/php/php-src/commit/10bc5fd4c4c8e1dd57bd911b086e9872a56300a0

STREAM_CRYPTO_METHOD_SSLv23_CLIENT is not safe to use because before php 5.6.7, it means sslv2 or sslv3. So, you should do this :
<?php
$crypto_method
= STREAM_CRYPTO_METHOD_TLS_CLIENT;

if (
defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
   
$crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
   
$crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
}

stream_socket_enable_crypto($socket, true, $crypto_method);
?>
up
6
tigger (AT) tiggerswelt d0t net
10 years ago
As already mentioned above:

stream_socket_enable_crypto is likely to fail/return zero if the socket is in non-blocking mode.

You may either wait some seconds until all neccessary data has arrived or switch temporary to blocking mode:

<?PHP

  stream_set_blocking
($fd, true);
 
stream_socket_enable_crypto ($fd, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
 
stream_set_blocking ($fd, false);

?>

This works very fine for me ;-)
up
2
mark at kinoko dot fr
9 years ago
Just to avoid letting you search everywhere why your code doesn't work when using this function to enable crypto as a server, and when using TLS, you have to put the certificate in the "ssl" context, even if you start a TLS, SSLv3, etc.. server.

I had some troubles because of that...
up
-2
bobe at webnaute dot net
2 years ago
There is an error in the description of the third argument:
"If omitted, the crypto_type context option on the stream's SSL context will be used instead."

The name of the context option is "crypto_method", NOT "crypto_type" which is just the name of the argument.
To Top