我正在尝试通过 SSL 将 POST 请求从一台服务器发送到 PHP 中的另一台服务器。CN_match
当我在上下文选项中使用时,它可以正常工作。但是,我在错误日志中收到一条弃用消息:
不推荐使用 PHP:不推荐使用 'CN_match' SSL 上下文选项以支持 'peer_name'
问题是,如果我按照建议更改CN_match
为peer_name
请求完全失败并显示以下消息:
无法打开流:HTTP 请求失败!HTTP/1.1 400 错误请求。
使用无效值peer_name
会导致预期错误:
对等证书 CN='localhost' 与预期的 CN='test' 不匹配
显然,当我指定“localhost”时,它匹配正确。我是否缺少使用peer_name
代替时所需的其他一些配置CN_match
?
使用 MAMP,PHP 5.6.27
$userdata = array(
'action' => 'add-user',
'name' => $name,
'email' => $email,
'username' => $username,
'password' => $password);
// use key 'http' even if you send the request to https://...
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($userdata)
),
'ssl' => array(
'verify_peer' => true,
'cafile' => /path/to/file.pem,
'verify_depth' => 5,
'allow_self_signed' => true,
'peer_name' => 'localhost'
)
);
$context = stream_context_create($options);
$data = file_get_contents('https://localhost/add-user.php', false, $context);