peer_verification.phpt 2.6 KB

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