session_meta_capture.phpt 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. --TEST--
  2. Capture SSL session meta array in stream context
  3. --EXTENSIONS--
  4. openssl
  5. --SKIPIF--
  6. <?php
  7. if (!function_exists("proc_open")) die("skip no proc_open");
  8. ?>
  9. --FILE--
  10. <?php
  11. $certFile = __DIR__ . DIRECTORY_SEPARATOR . 'session_meta_capture.pem.tmp';
  12. $cacertFile = __DIR__ . DIRECTORY_SEPARATOR . 'session_meta_capture-ca.pem.tmp';
  13. $serverCode = <<<'CODE'
  14. $serverUri = "ssl://127.0.0.1:64321";
  15. $serverFlags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
  16. $serverCtx = stream_context_create(['ssl' => [
  17. 'local_cert' => '%s',
  18. 'security_level' => 0,
  19. ]]);
  20. $server = stream_socket_server($serverUri, $errno, $errstr, $serverFlags, $serverCtx);
  21. phpt_notify();
  22. @stream_socket_accept($server, 1);
  23. @stream_socket_accept($server, 1);
  24. @stream_socket_accept($server, 1);
  25. @stream_socket_accept($server, 1);
  26. CODE;
  27. $serverCode = sprintf($serverCode, $certFile);
  28. $peerName = 'session_meta_capture';
  29. $clientCode = <<<'CODE'
  30. $serverUri = "ssl://127.0.0.1:64321";
  31. $clientFlags = STREAM_CLIENT_CONNECT;
  32. $clientCtx = stream_context_create(['ssl' => [
  33. 'verify_peer' => true,
  34. 'cafile' => '%s',
  35. 'peer_name' => '%s',
  36. 'security_level' => 0,
  37. ]]);
  38. phpt_wait();
  39. stream_context_set_option($clientCtx, 'ssl', 'crypto_method', STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT);
  40. $stream = stream_socket_client($serverUri, $errno, $errstr, 1, $clientFlags, $clientCtx);
  41. var_dump(stream_get_meta_data($stream)['crypto']['protocol']);
  42. stream_context_set_option($clientCtx, 'ssl', 'crypto_method', STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT);
  43. $stream = stream_socket_client($serverUri, $errno, $errstr, 1, $clientFlags, $clientCtx);
  44. var_dump(stream_get_meta_data($stream)['crypto']['protocol']);
  45. stream_context_set_option($clientCtx, 'ssl', 'crypto_method', STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT);
  46. $stream = stream_socket_client($serverUri, $errno, $errstr, 1, $clientFlags, $clientCtx);
  47. var_dump(stream_get_meta_data($stream)['crypto']['protocol']);
  48. CODE;
  49. $clientCode = sprintf($clientCode, $cacertFile, $peerName);
  50. include 'CertificateGenerator.inc';
  51. $certificateGenerator = new CertificateGenerator();
  52. $certificateGenerator->saveCaCert($cacertFile);
  53. $certificateGenerator->saveNewCertAsFileWithKey($peerName, $certFile);
  54. include 'ServerClientTestCase.inc';
  55. ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
  56. ?>
  57. --CLEAN--
  58. <?php
  59. @unlink(__DIR__ . DIRECTORY_SEPARATOR . 'session_meta_capture.pem.tmp');
  60. @unlink(__DIR__ . DIRECTORY_SEPARATOR . 'session_meta_capture-ca.pem.tmp');
  61. ?>
  62. --EXPECT--
  63. string(5) "TLSv1"
  64. string(7) "TLSv1.1"
  65. string(7) "TLSv1.2"