session_meta_capture.phpt 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. --TEST--
  2. Capture SSL session meta array in stream context
  3. --SKIPIF--
  4. <?php
  5. if (!extension_loaded("openssl")) die("skip openssl not loaded");
  6. if (!function_exists("proc_open")) die("skip no proc_open");
  7. if (OPENSSL_VERSION_NUMBER < 0x10001001) die("skip OpenSSLv1.0.1 required");
  8. --FILE--
  9. <?php
  10. $serverCode = <<<'CODE'
  11. $serverUri = "ssl://127.0.0.1:64321";
  12. $serverFlags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
  13. $serverCtx = stream_context_create(['ssl' => [
  14. 'local_cert' => __DIR__ . '/bug54992.pem'
  15. ]]);
  16. $server = stream_socket_server($serverUri, $errno, $errstr, $serverFlags, $serverCtx);
  17. phpt_notify();
  18. @stream_socket_accept($server, 1);
  19. @stream_socket_accept($server, 1);
  20. @stream_socket_accept($server, 1);
  21. @stream_socket_accept($server, 1);
  22. CODE;
  23. $clientCode = <<<'CODE'
  24. $serverUri = "ssl://127.0.0.1:64321";
  25. $clientFlags = STREAM_CLIENT_CONNECT;
  26. $clientCtx = stream_context_create(['ssl' => [
  27. 'verify_peer' => true,
  28. 'cafile' => __DIR__ . '/bug54992-ca.pem',
  29. 'peer_name' => 'bug54992.local',
  30. 'capture_session_meta' => true,
  31. ]]);
  32. phpt_wait();
  33. stream_context_set_option($clientCtx, 'ssl', 'crypto_method', STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT);
  34. stream_socket_client($serverUri, $errno, $errstr, 1, $clientFlags, $clientCtx);
  35. $meta = stream_context_get_options($clientCtx)['ssl']['session_meta'];
  36. var_dump($meta['protocol']);
  37. stream_context_set_option($clientCtx, 'ssl', 'crypto_method', STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT);
  38. stream_socket_client($serverUri, $errno, $errstr, 1, $clientFlags, $clientCtx);
  39. $meta = stream_context_get_options($clientCtx)['ssl']['session_meta'];
  40. var_dump($meta['protocol']);
  41. stream_context_set_option($clientCtx, 'ssl', 'crypto_method', STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT);
  42. stream_socket_client($serverUri, $errno, $errstr, 2, $clientFlags, $clientCtx);
  43. $meta = stream_context_get_options($clientCtx)['ssl']['session_meta'];
  44. var_dump($meta['protocol']);
  45. CODE;
  46. include 'ServerClientTestCase.inc';
  47. ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
  48. --EXPECTF--
  49. string(5) "TLSv1"
  50. string(7) "TLSv1.1"
  51. string(7) "TLSv1.2"