diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c index fb3089ec271a..b91a93f756a6 100644 --- a/ext/soap/php_http.c +++ b/ext/soap/php_http.c @@ -213,13 +213,33 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, ph protocol = "ssl"; break; - default: + case SOAP_SSL_METHOD_TLSv1_0: + protocol = "tlsv1.0"; + break; + + case SOAP_SSL_METHOD_TLSv1_1: + protocol = "tlsv1.1"; + break; + + case SOAP_SSL_METHOD_TLSv1_2: + protocol = "tlsv1.2"; + break; + + case SOAP_SSL_METHOD_TLS_ANY: + protocol = "tls"; + break; + + case SOAP_SSL_METHOD_ANY: protocol = "ssl"; break; + default: + protocol = "tls"; + break; + } } else { - protocol = "ssl"; + protocol = "tls"; } } else { protocol = "tcp"; @@ -280,7 +300,7 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, ph if (stream) { /* if a stream is created without encryption, check to see if SSL method parameter is specified and use proper encrypyion method based on constants defined in soap.c */ - int crypto_method = STREAM_CRYPTO_METHOD_SSLv23_CLIENT; + int crypto_method = STREAM_CRYPTO_METHOD_TLS_ANY_CLIENT; if ((tmp = zend_hash_str_find(Z_OBJPROP_P(this_ptr), "_ssl_method", sizeof("_ssl_method")-1)) != NULL && Z_TYPE_P(tmp) == IS_LONG) { switch (Z_LVAL_P(tmp)) { @@ -300,8 +320,28 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, ph crypto_method = STREAM_CRYPTO_METHOD_SSLv23_CLIENT; break; + case SOAP_SSL_METHOD_TLSv1_0: + crypto_method = STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT; + break; + + case SOAP_SSL_METHOD_TLSv1_1: + crypto_method = STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT; + break; + + case SOAP_SSL_METHOD_TLSv1_2: + crypto_method = STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; + break; + + case SOAP_SSL_METHOD_TLS_ANY: + crypto_method = STREAM_CRYPTO_METHOD_TLS_ANY_CLIENT; + break; + + case SOAP_SSL_METHOD_ANY: + crypto_method = STREAM_CRYPTO_METHOD_ANY_CLIENT; + break; + default: - crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT; + crypto_method = STREAM_CRYPTO_METHOD_TLS_ANY_CLIENT; break; } } diff --git a/ext/soap/php_soap.h b/ext/soap/php_soap.h index b01e963a9839..c3916ab3c42e 100644 --- a/ext/soap/php_soap.h +++ b/ext/soap/php_soap.h @@ -147,11 +147,15 @@ struct _soapService { #define WSDL_CACHE_BOTH 0x3 /* New SOAP SSL Method Constants */ -#define SOAP_SSL_METHOD_TLS 0 -#define SOAP_SSL_METHOD_SSLv2 1 -#define SOAP_SSL_METHOD_SSLv3 2 -#define SOAP_SSL_METHOD_SSLv23 3 - +#define SOAP_SSL_METHOD_TLS 0 +#define SOAP_SSL_METHOD_SSLv2 1 +#define SOAP_SSL_METHOD_SSLv3 2 +#define SOAP_SSL_METHOD_SSLv23 3 +#define SOAP_SSL_METHOD_TLSv1_0 4 +#define SOAP_SSL_METHOD_TLSv1_1 5 +#define SOAP_SSL_METHOD_TLSv1_2 6 +#define SOAP_SSL_METHOD_TLS_ANY 7 +#define SOAP_SSL_METHOD_ANY 8 ZEND_BEGIN_MODULE_GLOBALS(soap) HashTable defEncNs; /* mapping of default namespaces to prefixes */ diff --git a/ext/soap/soap.c b/ext/soap/soap.c index bff077d95fdb..f1970fe53252 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -766,10 +766,15 @@ PHP_MINIT_FUNCTION(soap) REGISTER_LONG_CONSTANT("WSDL_CACHE_BOTH", WSDL_CACHE_BOTH, CONST_CS | CONST_PERSISTENT); /* New SOAP SSL Method Constants */ - REGISTER_LONG_CONSTANT("SOAP_SSL_METHOD_TLS", SOAP_SSL_METHOD_TLS, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SOAP_SSL_METHOD_SSLv2", SOAP_SSL_METHOD_SSLv2, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SOAP_SSL_METHOD_SSLv3", SOAP_SSL_METHOD_SSLv3, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SOAP_SSL_METHOD_TLS", SOAP_SSL_METHOD_TLS, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SOAP_SSL_METHOD_SSLv2", SOAP_SSL_METHOD_SSLv2, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SOAP_SSL_METHOD_SSLv3", SOAP_SSL_METHOD_SSLv3, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SOAP_SSL_METHOD_SSLv23", SOAP_SSL_METHOD_SSLv23, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SOAP_SSL_METHOD_TLSv1_0", SOAP_SSL_METHOD_TLSv1_0, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SOAP_SSL_METHOD_TLSv1_1", SOAP_SSL_METHOD_TLSv1_1, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SOAP_SSL_METHOD_TLSv1_2", SOAP_SSL_METHOD_TLSv1_2, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SOAP_SSL_METHOD_TLS_ANY", SOAP_SSL_METHOD_TLS_ANY, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SOAP_SSL_METHOD_ANY", SOAP_SSL_METHOD_ANY, CONST_CS | CONST_PERSISTENT); old_error_handler = zend_error_cb; zend_error_cb = soap_error_handler;