Annotation of embedaddon/php/ext/openssl/tests/sni_001.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: SNI 001
                      3: --SKIPIF--
                      4: <?php
                      5:        if (!extension_loaded('openssl')) die("skip openssl extension not available");
                      6:        if (!getenv('SNI_TESTS')) die("skip Set SNI_TESTS to enable this test (uses remote resources)");
                      7: ?>
                      8: --FILE--
                      9: <?php
                     10: /* Server Name Indication (SNI) tests
                     11:  * 
                     12:  * This test relies on https://sni.velox.ch/ and thus is disabled by default.
                     13:  *
                     14:  * sni.velox.ch uses 3 certificates :
                     15:  * - CN=alice.sni.velox.ch (sent in response to server_name = alice.sni.velox.ch or not set)
                     16:  * - CN=bob.sni.velox.ch (sent in response to server_name = bob.sni.velox.ch)
                     17:  * - CN=*.sni.velox.ch (sent in response to server_name = mallory.sni.velox.ch or *.sni.velox.ch or sni.velox.ch)
                     18:  *
                     19:  * The test sends requests to the server, sending different names, and checks which certificate
                     20:  * the server returned.
                     21:  */
                     22: 
                     23: function context() {
                     24:        return stream_context_create(array(
                     25:                'ssl' => array(
                     26:                        'capture_peer_cert' => true,
                     27:                ),
                     28:        ));
                     29: }
                     30: 
                     31: function get_CN($context) {
                     32: 
                     33:        $ary = stream_context_get_options($context);
                     34:        assert($ary);
                     35: 
                     36:        $cert = $ary['ssl']['peer_certificate'];
                     37:        assert($cert);
                     38: 
                     39:        $cert_ary = openssl_x509_parse($cert);
                     40:        return $cert_ary['subject']['CN'];
                     41: }
                     42: 
                     43: function do_http_test($url, $context) {
                     44: 
                     45:        $fh = fopen($url, 'r', false, $context);
                     46:        assert($fh);
                     47: 
                     48:        var_dump(get_CN($context));
                     49: }
                     50: 
                     51: function do_ssl_test($url, $context) {
                     52: 
                     53:        $fh = stream_socket_client($url, $errno, $errstr, 
                     54:                        ini_get("default_socket_timeout"), STREAM_CLIENT_CONNECT, $context);
                     55:        assert($fh);
                     56: 
                     57:        var_dump(get_CN($context));
                     58: }
                     59: 
                     60: function do_enable_crypto_test($url, $context) {
                     61: 
                     62:        $fh = stream_socket_client($url, $errno, $errstr,
                     63:                ini_get("default_socket_timeout"), STREAM_CLIENT_CONNECT, $context);
                     64:        assert($fh);
                     65: 
                     66:        $r = stream_socket_enable_crypto($fh, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
                     67:        assert($r);
                     68: 
                     69:        var_dump(get_CN($context));
                     70: }
                     71: 
                     72: /* Test https:// streams */
                     73: 
                     74: echo "-- auto host name (1) --\n";
                     75: do_http_test('https://alice.sni.velox.ch/', context());
                     76: 
                     77: echo "-- auto host name (2) --\n";
                     78: do_http_test('https://bob.sni.velox.ch/', context());
                     79: 
                     80: echo "-- auto host name (3) --\n";
                     81: do_http_test('https://bob.sni.velox.ch./', context());
                     82: 
                     83: echo "-- user supplied server name --\n";
                     84: 
                     85: $context = context();
                     86: stream_context_set_option($context, 'ssl', 'SNI_server_name', 'bob.sni.velox.ch');
                     87: stream_context_set_option($context, 'http', 'header', b'Host: bob.sni.velox.ch');
                     88: do_http_test('https://alice.sni.velox.ch/', $context);
                     89: 
                     90: echo "-- sni disabled --\n";
                     91: 
                     92: $context = context();
                     93: stream_context_set_option($context, 'ssl', 'SNI_enabled', false);
                     94: do_http_test('https://bob.sni.velox.ch/', $context);
                     95: 
                     96: /* Test ssl:// socket streams */
                     97: 
                     98: echo "-- raw SSL stream (1) --\n";
                     99: do_ssl_test('ssl://bob.sni.velox.ch:443', context());
                    100: 
                    101: echo "-- raw SSL stream (2) --\n";
                    102: do_ssl_test('ssl://mallory.sni.velox.ch:443', context());
                    103: 
                    104: echo "-- raw SSL stream with user supplied sni --\n";
                    105: 
                    106: $context = context();
                    107: stream_context_set_option($context, 'ssl', 'SNI_server_name', 'bob.sni.velox.ch');
                    108: 
                    109: do_ssl_test('ssl://mallory.sni.velox.ch:443', $context);
                    110: 
                    111: echo "-- raw SSL stream with sni disabled --\n";
                    112: 
                    113: $context = context();
                    114: stream_context_set_option($context, 'ssl', 'SNI_enabled', false);
                    115: 
                    116: do_ssl_test('ssl://mallory.sni.velox.ch:443', $context);
                    117: 
                    118: /* Test tcp:// socket streams with SSL enabled */
                    119: 
                    120: echo "-- stream_socket_enable_crypto (1) --\n";
                    121: 
                    122: do_enable_crypto_test('tcp://bob.sni.velox.ch:443', context());
                    123: 
                    124: echo "-- stream_socket_enable_crypto (2) --\n";
                    125: 
                    126: do_enable_crypto_test('tcp://mallory.sni.velox.ch:443', context());
                    127: 
                    128: echo "-- stream_socket_enable_crypto with user supplied sni --\n";
                    129: 
                    130: $context = context();
                    131: stream_context_set_option($context, 'ssl', 'SNI_server_name', 'bob.sni.velox.ch');
                    132: 
                    133: do_enable_crypto_test('tcp://mallory.sni.velox.ch:443', $context);
                    134: 
                    135: echo "-- stream_socket_enable_crypto with sni disabled --\n";
                    136: 
                    137: $context = context();
                    138: stream_context_set_option($context, 'ssl', 'SNI_enabled', false);
                    139: 
                    140: do_enable_crypto_test('tcp://mallory.sni.velox.ch:443', $context);
                    141: 
                    142: echo "-- stream_socket_enable_crypto with long name --\n";
                    143: 
                    144: $context = context();
                    145: stream_context_set_option($context, 'ssl', 'SNI_server_name', str_repeat('a.', 500) . '.sni.velox.ch');
                    146: 
                    147: do_enable_crypto_test('tcp://mallory.sni.velox.ch:443', $context);
                    148: 
                    149: ?>
                    150: --EXPECTF--
                    151: -- auto host name (1) --
                    152: %unicode|string%(18) "alice.sni.velox.ch"
                    153: -- auto host name (2) --
                    154: %unicode|string%(16) "bob.sni.velox.ch"
                    155: -- auto host name (3) --
                    156: %unicode|string%(16) "bob.sni.velox.ch"
                    157: -- user supplied server name --
                    158: %unicode|string%(16) "bob.sni.velox.ch"
                    159: -- sni disabled --
                    160: %unicode|string%(18) "alice.sni.velox.ch"
                    161: -- raw SSL stream (1) --
                    162: %unicode|string%(16) "bob.sni.velox.ch"
                    163: -- raw SSL stream (2) --
                    164: %unicode|string%(14) "*.sni.velox.ch"
                    165: -- raw SSL stream with user supplied sni --
                    166: %unicode|string%(16) "bob.sni.velox.ch"
                    167: -- raw SSL stream with sni disabled --
                    168: %unicode|string%(18) "alice.sni.velox.ch"
                    169: -- stream_socket_enable_crypto (1) --
                    170: %unicode|string%(16) "bob.sni.velox.ch"
                    171: -- stream_socket_enable_crypto (2) --
                    172: %unicode|string%(14) "*.sni.velox.ch"
                    173: -- stream_socket_enable_crypto with user supplied sni --
                    174: %unicode|string%(16) "bob.sni.velox.ch"
                    175: -- stream_socket_enable_crypto with sni disabled --
                    176: %unicode|string%(18) "alice.sni.velox.ch"
                    177: -- stream_socket_enable_crypto with long name --
                    178: %unicode|string%(18) "alice.sni.velox.ch"

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>