如何检查主机名是否与PHP中的SSL证书中的Common Name相匹配?

时间:2017-02-20 11:21:18

标签: php ssl curl

使用此PHP脚本

jmeter -Jsample_variables=request,response -n -t test.jmx -l result.jtl

我没有错误。这似乎没问题。

预期结果应显示一条错误消息,指出证书名称<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPGET, true); curl_setopt($ch, CURLOPT_URL, 'https://sf.net/'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); if (!curl_exec($ch)) { echo "Error #" . curl_errno($ch) . ": " . curl_error($ch); } ?> 与预期sourceforge.net不匹配。你觉得怎么样?

1 个答案:

答案 0 :(得分:2)

如果您访问sf.net,您将获得sf.net的证书而不是sourceforge.net的证书。 sf.net的证书有CN *.sf.net和SAN DNS:*.sf.net, DNS:sf.net。这意味着证书与URL匹配。不要对以下重定向到sourceforge.net感到困惑,因为在此重定向中,它将获得一个对新目标有效的新证书。

除此之外,通过将CURLOPT_SSL_VERIFYPEER设置为false,您将接受任何证书,无论它是否由本地受信任的CA颁发。设置CURLOPT_SSL_VERIFYHOST也无济于事,因为两个设置相结合后,您将接受名为sf.net的自签名证书,这使得中间人攻击变得微不足道。