peer_verification.phpt 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. --TEST--
  2. Peer verification enabled for client streams
  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 . 'peer_verification.pem.tmp';
  12. $cacertFile = __DIR__ . DIRECTORY_SEPARATOR . 'peer_verification-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. ]]);
  19. $server = stream_socket_server($serverUri, $errno, $errstr, $serverFlags, $serverCtx);
  20. phpt_notify();
  21. for ($i = 0; $i < 5; $i++) {
  22. @stream_socket_accept($server, 1);
  23. }
  24. CODE;
  25. $serverCode = sprintf($serverCode, $certFile);
  26. $peerName = 'peer_verification';
  27. $clientCode = <<<'CODE'
  28. $serverUri = "ssl://127.0.0.1:64321";
  29. $clientFlags = STREAM_CLIENT_CONNECT;
  30. $caFile = '%s';
  31. phpt_wait();
  32. // Expected to fail -- untrusted server cert and no CA File present
  33. var_dump(@stream_socket_client($serverUri, $errno, $errstr, 1, $clientFlags));
  34. // Expected to fail -- untrusted server cert and no CA File present
  35. $clientCtx = stream_context_create(['ssl' => [
  36. 'verify_peer' => true,
  37. ]]);
  38. var_dump(@stream_socket_client($serverUri, $errno, $errstr, 1, $clientFlags, $clientCtx));
  39. // Should succeed with peer verification disabled in context
  40. $clientCtx = stream_context_create(['ssl' => [
  41. 'verify_peer' => false,
  42. 'verify_peer_name' => false,
  43. ]]);
  44. var_dump(stream_socket_client($serverUri, $errno, $errstr, 1, $clientFlags, $clientCtx));
  45. // Should succeed with CA file specified in context
  46. $clientCtx = stream_context_create(['ssl' => [
  47. 'cafile' => $caFile,
  48. 'peer_name' => '%s',
  49. ]]);
  50. var_dump(stream_socket_client($serverUri, $errno, $errstr, 1, $clientFlags, $clientCtx));
  51. CODE;
  52. $clientCode = sprintf($clientCode, $cacertFile, $peerName);
  53. include 'CertificateGenerator.inc';
  54. $certificateGenerator = new CertificateGenerator();
  55. $certificateGenerator->saveCaCert($cacertFile);
  56. $certificateGenerator->saveNewCertAsFileWithKey($peerName, $certFile);
  57. include 'ServerClientTestCase.inc';
  58. ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
  59. ?>
  60. --CLEAN--
  61. <?php
  62. @unlink(__DIR__ . DIRECTORY_SEPARATOR . 'peer_verification.pem.tmp');
  63. @unlink(__DIR__ . DIRECTORY_SEPARATOR . 'peer_verification-ca.pem.tmp');
  64. ?>
  65. --EXPECTF--
  66. bool(false)
  67. bool(false)
  68. resource(%d) of type (stream)
  69. resource(%d) of type (stream)