--TEST-- TLS session resumption - client basic resumption --EXTENSIONS-- openssl --SKIPIF-- --FILE-- [ 'local_cert' => '%s', 'session_cache' => true, 'session_id_context' => 'test-basic', ]]); $server = stream_socket_server('tls://127.0.0.1:0', $errno, $errstr, $flags, $ctx); phpt_notify_server_start($server); /* Accept two connections */ for ($i = 0; $i < 2; $i++) { $client = @stream_socket_accept($server, 30); if ($client) { fwrite($client, "Hello from server\n"); fclose($client); } } CODE; $serverCode = sprintf($serverCode, $certFile); $clientCode = <<<'CODE' $sessionData = ''; $flags = STREAM_CLIENT_CONNECT; $ctx = stream_context_create(['ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, 'session_new_cb' => function($stream, $session) use (&$sessionData) { $sessionData = $session; } ]]); /* First connection - full handshake */ $client1 = stream_socket_client("tls://{{ ADDR }}", $errno, $errstr, 30, $flags, $ctx); if ($client1) { echo trim(fgets($client1)) . "\n"; $meta1 = stream_get_meta_data($client1); echo "First connection resumed: " . ($meta1['crypto']['session_reused'] ? "yes" : "no") . "\n"; echo "Session data received: " . (!empty($sessionData) ? "yes" : "no") . "\n"; fclose($client1); } /* Second connection - resumed session */ $ctx2 = stream_context_create(['ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, 'session_data' => $sessionData, ]]); $client2 = stream_socket_client("tls://{{ ADDR }}", $errno, $errstr, 30, $flags, $ctx2); if ($client2) { echo trim(fgets($client2)) . "\n"; $meta2 = stream_get_meta_data($client2); echo "Second connection resumed: " . ($meta2['crypto']['session_reused'] ? "yes" : "no") . "\n"; fclose($client2); } CODE; include 'CertificateGenerator.inc'; $certificateGenerator = new CertificateGenerator(); $certificateGenerator->saveNewCertAsFileWithKey('session_resumption_test', $certFile); include 'ServerClientTestCase.inc'; ServerClientTestCase::getInstance()->run($clientCode, $serverCode); ?> --CLEAN-- --EXPECT-- Hello from server First connection resumed: no Session data received: yes Hello from server Second connection resumed: yes