Annotation of embedaddon/php/ext/openssl/tests/sni_001.phpt, revision 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>