sni_server.phpt 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. --TEST--
  2. sni_server
  3. --SKIPIF--
  4. <?php
  5. if (!extension_loaded("openssl")) die("skip openssl not loaded");
  6. --FILE--
  7. <?php
  8. $serverCode = <<<'CODE'
  9. $flags = STREAM_SERVER_BIND|STREAM_SERVER_LISTEN;
  10. $ctx = stream_context_create(['ssl' => [
  11. 'local_cert' => __DIR__ . '/domain1.pem',
  12. 'SNI_server_certs' => [
  13. "domain1.com" => __DIR__ . "/sni_server_domain1.pem",
  14. "domain2.com" => __DIR__ . "/sni_server_domain2.pem",
  15. "domain3.com" => __DIR__ . "/sni_server_domain3.pem"
  16. ]
  17. ]]);
  18. $server = stream_socket_server('tls://127.0.0.1:64321', $errno, $errstr, $flags, $ctx);
  19. phpt_notify();
  20. for ($i=0; $i < 3; $i++) {
  21. @stream_socket_accept($server, 3);
  22. }
  23. CODE;
  24. $clientCode = <<<'CODE'
  25. $flags = STREAM_CLIENT_CONNECT;
  26. $ctxArr = [
  27. 'cafile' => __DIR__ . '/sni_server_ca.pem',
  28. 'capture_peer_cert' => true
  29. ];
  30. phpt_wait();
  31. $ctxArr['peer_name'] = 'domain1.com';
  32. $ctx = stream_context_create(['ssl' => $ctxArr]);
  33. $client = stream_socket_client("tls://127.0.0.1:64321", $errno, $errstr, 1, $flags, $ctx);
  34. $cert = stream_context_get_options($ctx)['ssl']['peer_certificate'];
  35. var_dump(openssl_x509_parse($cert)['subject']['CN']);
  36. $ctxArr['peer_name'] = 'domain2.com';
  37. $ctx = stream_context_create(['ssl' => $ctxArr]);
  38. $client = @stream_socket_client("tls://127.0.0.1:64321", $errno, $errstr, 1, $flags, $ctx);
  39. $cert = stream_context_get_options($ctx)['ssl']['peer_certificate'];
  40. var_dump(openssl_x509_parse($cert)['subject']['CN']);
  41. $ctxArr['peer_name'] = 'domain3.com';
  42. $ctx = stream_context_create(['ssl' => $ctxArr]);
  43. $client = @stream_socket_client("tls://127.0.0.1:64321", $errno, $errstr, 1, $flags, $ctx);
  44. $cert = stream_context_get_options($ctx)['ssl']['peer_certificate'];
  45. var_dump(openssl_x509_parse($cert)['subject']['CN']);
  46. CODE;
  47. include 'ServerClientTestCase.inc';
  48. ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
  49. --EXPECTF--
  50. string(%d) "domain1.com"
  51. string(%d) "domain2.com"
  52. string(%d) "domain3.com"