Диагностика проблемы: почему WP-CLI не работает с HTTPS
WP-CLI — это мощный инструмент для управления WordPress из командной строки. Однако при работе с сайтами на HTTPS часто возникают ошибки, связанные с валидацией SSL-сертификата или неправильной конфигурацией URL. Типичные симптомы:
- Ошибка
cURL error 60: SSL certificate problemпри выполнении команд, которые делают HTTP-запросы (например,wp plugin install,wp theme update). - Ошибки с указанием неправильного протокола, если в базе данных прописаны HTTP URL вместо HTTPS.
- Проблемы с командами, которые обращаются к REST API сайта, например,
wp option getили кастомные скрипты через WP-CLI.
Почему это происходит?
Основные причины:
- WP-CLI использует PHP и cURL для HTTP-запросов. Если SSL-сертификат сайта не доверенный или отсутствует локальный файл
cacert.pem, cURL отвергает соединение. - В базе данных WordPress и в конфигурационных файлах могут быть прописаны URL с протоколом
http://, что вызывает смешанный контент и ошибки SSL. - Некорректная настройка переменных окружения или параметров WP-CLI, приводящая к конфликтам протоколов.
Пошаговое решение: настройка WP-CLI для корректной работы с HTTPS
1. Проверка и обновление корневых URL в базе данных
Убедитесь, что в базе данных в таблице wp_options значения siteurl и home используют https://. Для проверки можно использовать команду:
wp option get siteurl
wp option get homeЧтобы заменить HTTP на HTTPS, выполните:
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guidПараметр --skip-columns=guid важен, чтобы не менять ссылки в GUID, что может вызвать проблемы с индексированием.
2. Настройка cURL для проверки SSL
Если возникает ошибка SSL сертификата, проверьте наличие и актуальность файла cacert.pem. Для этого:
- Скачайте актуальный файл с официального сайта https://curl.se/docs/caextract.html.
- Укажите путь к файлу в php.ini, добавив или изменив строку:
curl.cainfo = "/path/to/cacert.pem"Перезапустите PHP-FPM или веб-сервер, чтобы настройки вступили в силу.
Если WP-CLI использует отдельный конфиг PHP, убедитесь, что там тоже прописан этот параметр.
3. Принудительное указание протокола в WP-CLI командах
Для некоторых команд можно явно указать URL с HTTPS, например:
wp plugin install jetpack --url=https://example.comЭто особенно полезно, если у вас мультисайт или несколько инсталляций.
4. Временное отключение проверки SSL (не рекомендуется на постоянной основе)
Для отладки можно отключить проверку SSL, добавив в wp-cli.yml или вызвав команду с параметром --skip-ssl (если поддерживается). Но это небезопасно и должно использоваться только для диагностики.
Проверка результата после внедрения
После выполнения всех шагов:
- Запустите команду, которая раньше выдавалась с ошибкой SSL, например:
wp plugin install akismet --activate- Проверьте, что команда выполнена без ошибок, и плагин установлен.
- Проверьте корректность URL в админке WordPress (
Настройки > Общие). - Можно дополнительно проверить curl-запрос с сервера вручную:
curl -I https://example.comВы должны увидеть ответ с кодом 200 и без ошибок SSL.
Частые ошибки и как их исправить
- Ошибка:
cURL error 60: SSL certificate problem
Причина: Отсутствие или устаревшийcacert.pem.
Решение: Обновить файл и указать путь в php.ini. - Ошибка: WP-CLI обращается по
http://вместоhttps://
Причина: Неправильные значенияsiteurlиhome.
Решение: Исправить черезwp search-replace. - Ошибка: Команды с REST API не работают
Причина: Проблемы с аутентификацией или смешанный контент.
Решение: Проверить и настроить правильный протокол, использовать параметры--url.
Практические советы по безопасности и производительности
- Не отключайте проверку SSL в рабочих условиях — это снижает безопасность.
- Регулярно обновляйте корневые сертификаты (
cacert.pem), чтобы избежать проблем с истечением срока действия. - Используйте
wp search-replaceс осторожностью — всегда делайте резервную копию базы данных перед массовыми изменениями. - Если работаете с мультисайтами, проверяйте URL для каждого сайта отдельно.
- Для ускорения загрузки убедитесь, что сервер поддерживает HTTP/2 или HTTP/3 вместе с HTTPS.
Сравнение вариантов решения проблемы SSL в WP-CLI
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
Обновление cacert.pem и настройка php.ini | Надёжное решение, сохраняет безопасность | Требует доступа к серверу и перезапуска PHP | Постоянная эксплуатация |
Исправление URL через wp search-replace | Решает проблемы с протоколом в базе данных | Риск повреждения данных без бэкапа | При смене HTTP на HTTPS |
Использование параметра --url=https:// | Простое временное решение | Требуется указывать для каждой команды | При мультисайтах или тестах |
| Отключение проверки SSL | Быстрая диагностика | Уязвимость к MITM атакам | Только для отладки |