mirror of
https://github.com/php/php-src.git
synced 2025-01-22 03:34:19 +08:00
Support for HTTPS with digital certificates.
This commit is contained in:
parent
1312fe469e
commit
56025c6a1a
@ -84,6 +84,7 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, in
|
||||
zval **proxy_host, **proxy_port;
|
||||
char *host;
|
||||
#ifdef ZEND_ENGINE_2
|
||||
php_stream_context *context = NULL;
|
||||
char *name;
|
||||
long namelen;
|
||||
#endif
|
||||
@ -107,12 +108,26 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, in
|
||||
|
||||
#ifdef ZEND_ENGINE_2
|
||||
namelen = spprintf(&name, 0, "%s://%s:%d", (use_ssl && !*use_proxy)? "ssl" : "tcp", host, port);
|
||||
if (use_ssl) {
|
||||
zval **tmp;
|
||||
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_local_cert", sizeof("_local_cert"), (void **) &tmp) == SUCCESS &&
|
||||
Z_TYPE_PP(tmp) == IS_STRING) {
|
||||
context = php_stream_context_alloc();
|
||||
php_stream_context_set_option(context, "ssl", "local_cert", *tmp);
|
||||
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_passphrase", sizeof("_passphrase"), (void **) &tmp) == SUCCESS &&
|
||||
Z_TYPE_PP(tmp) == IS_STRING) {
|
||||
php_stream_context_set_option(context, "ssl", "passphrase", *tmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
stream = php_stream_xport_create(name, namelen,
|
||||
ENFORCE_SAFE_MODE | REPORT_ERRORS,
|
||||
STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT,
|
||||
NULL /*persistent_id*/,
|
||||
NULL /*timeout*/,
|
||||
NULL, NULL, NULL);
|
||||
context,
|
||||
NULL, NULL);
|
||||
efree(name);
|
||||
#else
|
||||
stream = php_stream_sock_open_host(host, port, SOCK_STREAM, NULL, NULL);
|
||||
|
@ -1967,6 +1967,14 @@ PHP_METHOD(SoapClient, SoapClient)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (zend_hash_find(ht, "local_cert", sizeof("local_cert"), (void**)&tmp) == SUCCESS &&
|
||||
Z_TYPE_PP(tmp) == IS_STRING) {
|
||||
add_property_stringl(this_ptr, "_local_cert", Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
|
||||
if (zend_hash_find(ht, "passphrase", sizeof("passphrase"), (void**)&tmp) == SUCCESS &&
|
||||
Z_TYPE_PP(tmp) == IS_STRING) {
|
||||
add_property_stringl(this_ptr, "_passphrase", Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
|
||||
}
|
||||
}
|
||||
if (zend_hash_find(ht, "trace", sizeof("trace"), (void**)&tmp) == SUCCESS &&
|
||||
(Z_TYPE_PP(tmp) == IS_BOOL || Z_TYPE_PP(tmp) == IS_LONG) &&
|
||||
Z_LVAL_PP(tmp) == 1) {
|
||||
|
Loading…
Reference in New Issue
Block a user