Итак, сначала код ошибки:
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);
?>
Фактическое имя сайта было изменено, но я дважды и трижды проверил сертификат и совпадения имен. Это премиальный SSL-сертификат от Центра сертификации Starfield Secure — 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.
Хорошо, я смог решить эту проблему. В моем случае это не имеет ничего общего с curl или сертификатами.
Наш сайт работает так, как если вы нажали на него, но не используете правильный URL-адрес для сайта, он перенаправит вас на правильный URL-адрес.
Поскольку этот сценарий обращался к сайту из того же ящика, в котором размещен сайт, он пытался получить доступ к «localhost». Какой наш сайт затем обнаружит ошибку URL и перенаправит вас на правильный URL «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 = Common Name (например, ВАШЕ имя)» …
Итак, в заключение, сценарий использовал сертификат брандмауэра, а не сертификат www.example.com вообще!
Чтобы исправить проблему, я обновил записи 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)
Других решений пока нет …