首先是错误代码:
string(345) "
404 - Not Found
"
0
SSL: certificate subject name 'Common Name (eg, YOUR name)' does not match target host name 'www.example.com'
使用以下测试脚本找到了它。
<?php
$request=<<<EOT
EOT;
$c = curl_init("https://www.example.com");
curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($c, CURLOPT_POST, "POST");
curl_setopt($c, CURLOPT_POSTFIELDS, $request);
curl_setopt ($c, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($c, CURLOPT_SSL_VERIFYHOST, 2);
ob_start();
curl_exec($c);
$response = ob_get_contents();
ob_end_clean();
$curlErrorCode = curl_errno($c);
$error = curl_error($c);
var_dump($response);
echo "<br>";
echo $curlErrorCode."<br>";
echo $error."<br>";
curl_close ($c);
?>
实际的网站名称已被更改,但我对该证书进行了双重和三重检查,并且名称匹配。这是Starfield安全认证机构颁发的优质SSL证书 - G2
Subject section of SSL CERT
CN = www.example.com
O = EXAMPLE, INC.
L = City
S = State
C = US
SERIALNUMBER = 19xxxxxxxx
2.5.x.xx = Private Organization
1.3.x.x.x.x.xxx.xx.x.x.x = State
1.3.x.x.x.x.xxx.xx.x.x.x = US
为使我们的支付系统符合规定,此脚本必须干净利落(此网站不在线,因此我们不接受不合规的付款)。但我一直无法清除它。任何人都知道为什么?
更多信息:
OS = MS Server 2012_R2
Platform = Hyper-v Virtual Instance (Hyper-v is installed on metal on MS Server 2012_R2)
Service = IIS 6.2 (build 9200)
Certificate is installed on IIS and bound to website.
答案 0 :(得分:1)
好的,我能够解决这个问题。就我而言,它与卷曲或证书无关。
我们网站的运作方式是,如果您点击它,但没有使用网站的正确网址,它会转发您正确的网址。
由于此脚本是从托管该网站的同一个框访问该网站,因此它尝试访问“localhost”。然后,我们的网站会找到网址的错误,并将您转到正确的“www.example.com”网址。
由于它被转发到URL,脚本最终被转发到的DNS地址为其提供了站点的外部IP地址。
转发后,防火墙上触发了DNS重新绑定错误,因为它位于防火墙内部。因此,将脚本登录到防火墙的错误页面上。
原始错误:
SSL: certificate subject name 'Common Name (eg, YOUR name)' does not match target host name 'www.example.com'
在我发现防火墙已恢复为默认证书“CN =公共名称(例如,您的姓名)”后,此错误才有意义......
总而言之,脚本使用的是防火墙证书,而不是www.example.com的证书!
要解决此问题,我更新了Hosting Server的DNS条目以反映www.example.com = 127.0.0.1
之后,脚本可以避免转发到外部地址,避免DNS重新绑定错误,最终能够找到www.example.com的正确证书
设置信息:
pfSense Firewall
X-Cart eCommerce platform w/ X-Payments
Windows Server 2012_R2
IIS 6.2 (build 9200)