sni_server.phpt 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. --TEST--
  2. sni_server
  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. $serverCode = <<<'CODE'
  12. $flags = STREAM_SERVER_BIND|STREAM_SERVER_LISTEN;
  13. $ctx = stream_context_create(['ssl' => [
  14. 'local_cert' => __DIR__ . '/domain1.pem',
  15. 'SNI_server_certs' => [
  16. "cs.php.net" => __DIR__ . "/sni_server_cs.pem",
  17. "uk.php.net" => __DIR__ . "/sni_server_uk.pem",
  18. "us.php.net" => __DIR__ . "/sni_server_us.pem"
  19. ]
  20. ]]);
  21. $server = stream_socket_server('tls://127.0.0.1:64321', $errno, $errstr, $flags, $ctx);
  22. phpt_notify();
  23. for ($i=0; $i < 3; $i++) {
  24. @stream_socket_accept($server, 3);
  25. }
  26. CODE;
  27. $clientCode = <<<'CODE'
  28. $flags = STREAM_CLIENT_CONNECT;
  29. $ctxArr = [
  30. 'cafile' => __DIR__ . '/sni_server_ca.pem',
  31. 'capture_peer_cert' => true
  32. ];
  33. phpt_wait();
  34. $ctxArr['peer_name'] = 'cs.php.net';
  35. $ctx = stream_context_create(['ssl' => $ctxArr]);
  36. $client = stream_socket_client("tls://127.0.0.1:64321", $errno, $errstr, 1, $flags, $ctx);
  37. $cert = stream_context_get_options($ctx)['ssl']['peer_certificate'];
  38. var_dump(openssl_x509_parse($cert)['subject']['CN']);
  39. $ctxArr['peer_name'] = 'uk.php.net';
  40. $ctx = stream_context_create(['ssl' => $ctxArr]);
  41. $client = @stream_socket_client("tls://127.0.0.1:64321", $errno, $errstr, 1, $flags, $ctx);
  42. $cert = stream_context_get_options($ctx)['ssl']['peer_certificate'];
  43. var_dump(openssl_x509_parse($cert)['subject']['CN']);
  44. $ctxArr['peer_name'] = 'us.php.net';
  45. $ctx = stream_context_create(['ssl' => $ctxArr]);
  46. $client = @stream_socket_client("tls://127.0.0.1:64321", $errno, $errstr, 1, $flags, $ctx);
  47. $cert = stream_context_get_options($ctx)['ssl']['peer_certificate'];
  48. var_dump(openssl_x509_parse($cert)['subject']['CN']);
  49. CODE;
  50. include 'ServerClientTestCase.inc';
  51. ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
  52. ?>
  53. --EXPECTF--
  54. string(%d) "cs.php.net"
  55. string(%d) "uk.php.net"
  56. string(%d) "us.php.net"