WooCommerce REST API: ошибка SSL при подключении и как её исправить

Диагностика проблемы: почему возникает ошибка SSL при работе с WooCommerce REST API

При работе с WooCommerce REST API нередко встречается ошибка, связанная с SSL-сертификатом. Например, при попытке выполнить запрос с помощью PHP-кода или Postman вы можете получить сообщение об ошибке вида cURL error 60: SSL certificate problem: unable to get local issuer certificate или SSL certificate problem: self signed certificate.

Основные причины возникновения ошибок SSL:

  • Отсутствие или некорректная цепочка SSL-сертификатов на сервере.
  • Использование самоподписанного сертификата без доверенного центра.
  • Неправильная настройка cURL на стороне клиента (например, PHP).
  • Проблемы с версиями TLS и поддержкой протоколов.

Пошаговое решение: как устранить ошибку SSL в WooCommerce REST API

1. Проверка SSL-сертификата сайта

Используйте онлайн-сервисы для проверки сертификата, например SSL Labs. Обратите внимание на:

  • Наличие полного цепочного сертификата (Intermediate Certificates).
  • Статус доверия сертификата.
  • Поддерживаемые протоколы TLS.

Если сертификат самоподписанный или отсутствует цепочка — настройте корректный сертификат через Let's Encrypt или приобретите у доверенного центра.

2. Настройка PHP cURL для корректной проверки сертификатов

В PHP при вызове REST API через cURL можно явно указать путь к корневым сертификатам:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://your-site.com/wp-json/wc/v3/products');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERPWD, 'consumer_key:consumer_secret');
curl_setopt($curl, CURLOPT_CAINFO, '/path/to/cacert.pem'); // путь к обновлённому файлу сертификатов
$response = curl_exec($curl);
if(curl_errno($curl)) {
    echo 'Error: ' . curl_error($curl);
}
curl_close($curl);

Файл cacert.pem можно скачать с официального сайта curl.se и регулярно обновлять.

3. Отключение проверки SSL (только для отладки)

Для быстрой отладки можно временно отключить проверку SSL, но не оставляйте этот код в продакшене:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

Проверка результата после внедрения решения

После внесения изменений выполните тестовый запрос к WooCommerce REST API с помощью PHP-скрипта, Postman или командной строки curl. Если ошибка SSL исчезла — значит проблема решена.

Пример тестирования через командную строку:

curl -u consumer_key:consumer_secret https://your-site.com/wp-json/wc/v3/products

Вы должны получить ответ в формате JSON с товарами, без ошибок SSL.

Частые ошибки и как их исправить

  • Ошибка: "unable to get local issuer certificate" — значит отсутствует или некорректен cacert.pem. Решение: скачайте и укажите правильный путь к файлу сертификатов.
  • Ошибка: "self signed certificate" — сертификат не доверенный. Решение: замените сертификат на доверенный или добавьте самоподписанный в доверенные (не рекомендуется).
  • Ошибка: PHP не использует обновлённый cacert.pem. Решение: проверьте конфигурацию php.ini, параметр curl.cainfo должен указывать на актуальный файл.
  • Ошибка: SSL handshake failed — возможно, устаревшая версия TLS. Решение: обновите OpenSSL, curl и PHP до актуальных версий.

Практические советы по безопасности и производительности

  • Никогда не отключайте проверку SSL на продакшене. Это снижает безопасность и может привести к MITM-атакам.
  • Регулярно обновляйте cacert.pem и используйте актуальные версии PHP и cURL.
  • Для интеграций с WooCommerce REST API используйте HTTPS и проверяйте сертификаты.
  • Если используете самоподписанный сертификат для тестов, добавьте его в доверенный хранилище клиента, а не отключайте проверку.

Сравнение вариантов решения SSL-проблем

МетодОписаниеПлюсыМинусы
Обновление и настройка cacert.pemУказываем путь к актуальному файлу корневых сертификатов в cURLБезопасно, надежно, поддерживается всеми системамиТребует регулярного обновления и настройки
Использование доверенного SSL-сертификатаУстановка сертификата от доверенного центра, например Let's EncryptМинимум ошибок SSL, высокая безопасностьНеобходима настройка сервера, требует продления сертификата
Отключение проверки SSL в cURLОтключение проверки сертификатов в клиентеПросто и быстро для отладкиКритично снижает безопасность, не для продакшена

Шаблоны для WP Плагины для WP