@@ -91,10 +91,16 @@ class Socket
91
91
'sslv3_client ' => STREAM_CRYPTO_METHOD_SSLv3_CLIENT,
92
92
'sslv23_client ' => STREAM_CRYPTO_METHOD_SSLv23_CLIENT,
93
93
'tls_client ' => STREAM_CRYPTO_METHOD_TLS_CLIENT ,
94
+ 'tlsv10_client ' => STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT,
95
+ 'tlsv11_client ' => STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT,
96
+ 'tlsv12_client ' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
94
97
'sslv2_server ' => STREAM_CRYPTO_METHOD_SSLv2_SERVER,
95
98
'sslv3_server ' => STREAM_CRYPTO_METHOD_SSLv3_SERVER,
96
99
'sslv23_server ' => STREAM_CRYPTO_METHOD_SSLv23_SERVER,
97
- 'tls_server ' => STREAM_CRYPTO_METHOD_TLS_SERVER
100
+ 'tls_server ' => STREAM_CRYPTO_METHOD_TLS_SERVER ,
101
+ 'tlsv10_server ' => STREAM_CRYPTO_METHOD_TLSv1_0_SERVER,
102
+ 'tlsv11_server ' => STREAM_CRYPTO_METHOD_TLSv1_1_SERVER,
103
+ 'tlsv12_server ' => STREAM_CRYPTO_METHOD_TLSv1_2_SERVER
98
104
// @codingStandardsIgnoreEnd
99
105
];
100
106
@@ -431,8 +437,23 @@ public function enableCrypto($type, $clientOrServer = 'client', $enable = true)
431
437
if (!array_key_exists ($ type . '_ ' . $ clientOrServer , $ this ->_encryptMethods )) {
432
438
throw new InvalidArgumentException ('Invalid encryption scheme chosen ' );
433
439
}
440
+ $ method = $ this ->_encryptMethods [$ type . '_ ' . $ clientOrServer ];
441
+
442
+ // Prior to PHP 5.6.7 TLS_CLIENT was any version of TLS. This was changed in 5.6.7
443
+ // to fix backwards compatibility issues, and now only resolves to TLS1.0
444
+ //
445
+ // See https://github.com/php/php-src/commit/10bc5fd4c4c8e1dd57bd911b086e9872a56300a0
446
+ if (version_compare (PHP_VERSION , '5.6.7 ' , '>= ' )) {
447
+ if ($ method == STREAM_CRYPTO_METHOD_TLS_CLIENT ) {
448
+ $ method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
449
+ }
450
+ if ($ method == STREAM_CRYPTO_METHOD_TLS_SERVER ) {
451
+ $ method |= STREAM_CRYPTO_METHOD_TLSv1_1_SERVER | STREAM_CRYPTO_METHOD_TLSv1_2_SERVER;
452
+ }
453
+ }
454
+
434
455
try {
435
- $ enableCryptoResult = stream_socket_enable_crypto ($ this ->connection , $ enable , $ this -> _encryptMethods [ $ type . ' _ ' . $ clientOrServer ] );
456
+ $ enableCryptoResult = stream_socket_enable_crypto ($ this ->connection , $ enable , $ method );
436
457
} catch (Exception $ e ) {
437
458
$ this ->setLastError (null , $ e ->getMessage ());
438
459
throw new SocketException ($ e ->getMessage ());
0 commit comments