Как получить доступ к HTTPS URL в PHP 8.3.10 на IIS 10?

Вопрос или проблема

На моем сервере нет SSL-сертификата для большего контекста.

Я заметил эту проблему только в IIS, вот пример кода, который вы можете использовать для воспроизведения моей проблемы

<?php
 $ch = curl_init();
 $url = "https://example.com";
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 $response = curl_exec($ch);
 echo $response;

Я могу совершать успешные HTTP-запросы только по протоколу HTTP как с помощью cURL, так и с помощью file_get_contents(), но получаю ошибки при использовании file_get_contents() для запроса по URL-адресу HTTPS и ничего не происходит при использовании cURL для запроса по URL-адресу HTTPS.

Я пытался поиграться с openssl.cafile и curl.cainfo, но безуспешно, как указано в ответе.

Также установил allow_url_fopen = On и allow_url_include = On в php.ini и включил расширение php OpenSSL согласно этой документации PHP

Я заметил эту проблему только в документе PHP, выполняющемся под IIS. Все работает как задумано в интерактивной оболочке PHP.

Вот мой php.ini, если это поможет, и мой web

Ответ или решение

Чтобы получить доступ к HTTPS URL-адресам в PHP 8.3.10, работающем на IIS 10, необходимо выполнить несколько шагов, чтобы убедиться, что cURL может правильно обрабатывать HTTPS-запросы, даже если у вас нет установленного SSL-сертификата на сервере. Вот полное руководство по решению вашей проблемы.

1. Убедитесь, что открыты необходимые расширения

Ваша версия PHP должна иметь включённые расширения OpenSSL и cURL. Проверьте файл php.ini на наличие следующих строк:

extension=openssl
extension=curl

Если эти строки закомментированы (начинаются с ;), уберите символ ; и сохраните изменения.

2. Настройка параметров cURL для незащищённого соединения

Поскольку у вас нет SSL-сертификата и вы сталкиваетесь с проблемами безопасности при выполнении HTTPS-запросов, вы можете настроить cURL, чтобы игнорировать проверки SSL. Это можно сделать с помощью следующих параметров:

$ch = curl_init();
$url = "https://example.com";

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // Отключаем проверку имени хоста
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Отключаем проверку SSL-сертификата

$response = curl_exec($ch);

if ($response === false) {
    echo 'Ошибка cURL: ' . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);

Важно: Отключение проверки SSL может быть небезопасным, и поэтому не рекомендуется для производственной среды. Старайтесь использовать этот подход только для разработки или тестирования.

3. Использование file_get_contents()

Если вы хотите использовать функцию file_get_contents() для доступа к HTTPS URL, убедитесь, что функция настроена схожим образом. Однако, стоит отметить, что эта функция может также сталкиваться с проблемами в случае отсутствия SSL-сертификата. Вы можете попробовать следующий код:

$options = [
    "ssl" => [
        "verify_peer" => false,
        "verify_peer_name" => false,
    ],
];

$url = "https://example.com";
$response = @file_get_contents($url, false, stream_context_create($options));

if ($response === false) {
    echo "Ошибка file_get_contents: " . error_get_last()['message'];
} else {
    echo $response;
}

4. Проверьте конфигурацию IIS

Убедитесь, что IIS настроен для работы с PHP и что на сервере правильно установлены права доступа для выполнения PHP-скриптов. Также проверьте настройки вашего сайта в IIS, чтобы убедиться, что он не блокирует HTTPS-запросы.

5. Проверка системных сертификатов

Некоторые разладки могут возникнуть из-за проблем с корневыми сертификатами на вашем сервере. Убедитесь, что используете актуальные корневые сертификаты. Вы можете скачать их и установить, если это необходимо.

Заключение

Следуя этим рекомендациям, вы сможете получить доступ к HTTPS URL-адресам в PHP под IIS. Обязательно протестируйте свои изменения в безопасном окружении и подумайте о получении SSL-сертификата для повышения безопасности вашего приложения.

Оцените материал
Добавить комментарий

Капча загружается...