cshepherd
  • 0
Новичок

Какова связь между cURL, WordPress и cacert.Pem?

  • 0

Я столкнулся с проблемой, связанной с wp_remote_get() и базовым вызовом cURL. В некоторых установках WordPress я вижу следующую ошибку SSL:

httprequest_failed: проблема с сертификатом SSL, убедитесь, что сертификат ЦС в порядке. Подробности: ошибка: 14090086: процедуры SSL: SSL3_GETSERVER_CERTIFICATE: ошибка проверки сертификата

Судя по моим исследованиям, мою проблему должно решить следующее: curl_setopt ($handle, CURLOPT_CAINFO, dirname( FILE ).»/cacert.pem»);

Я не уверен, что мне нужно настроить на моем сервере, чтобы эта ошибка не возникала. Я нашел указанную выше строку кода в другом плагине, но не знаю, почему.

Мысли?

Пасти

Share
  1. HTTPS — это не только шифрование. SSL также использует процесс, известный как проверка сертификата, для предотвращения подделки хоста. Это многоуровневый процесс, но вот краткий обзор:

    В мире существует несколько центров сертификации (ЦС). Когда вы получаете сертификат для своего доменного имени, позволяющий использовать SSL, обычно вы покупаете его в одном из этих ЦС. Они «подписывают» сертификат цифровой подписью, подтверждая, что они проверили его или что у вас есть.

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

    Curl также является веб-браузером. Точно так же он проверяет сертификаты. Тем не менее, curl — это программа, установленная на вашем веб-сервере, и она, вероятно, не обновлена ​​во всех последних и лучших центрах сертификации, списках отзыва и т. д. Поэтому, когда он проверяет подпись, проверка завершается неудачно, потому что он не знает соответствующих ЦС.

    Исправление для этого, о котором вы думаете, включает в себя получение новейшего файла cacert.pem (список сертификатов ЦС), а затем указание библиотеке curl, где этот файл находится, и использовать его. Это будет работать нормально, если у вас есть файл cacert.pem и вы поместите свой код в файл wp-config.php. Время от времени вам может потребоваться обновить файл cacert.pem до последней версии.

    Другой альтернативой является указание curl игнорировать фазу проверки и просто использовать SSL для шифрования. Это работает хорошо, но означает, что вы потенциально уязвимы для специализированных атак, но то, что они могут сделать, зависит от того, для чего вы используете удаленное получение. Для этого вы можете добавить аргумент sslverify к вызову wp_remote_get, например:

    wp_remote_get('https://whatever',array('sslverify'=>false));

    Изменить, чтобы избежать нового «ответа», так как моя репутация нулевая, и я не могу комментировать — MeanderingCode :

    В ответ на комментарий/вопрос MikeSchinkel : отсутствие проверки того, что подпись на сертификате принадлежит «доверенному» центру сертификации, означает, что любой мог создать сертификат для инициации зашифрованного HTTP-сеанса, и потенциально существует человек- In-The-Middle, расшифровывая ваш трафик, читая или изменяя его, повторно шифруя его и отправляя его в своем собственном сеансе с вашим предполагаемым пунктом назначения. Потенциально конфиденциальная информация передается по соединению; чаще всего, учетные данные аутентификации. MITM увидит в открытом виде любую информацию, отправленную по ссылке, а затем получит ваши учетные данные и любую другую информацию, которая была отправлена ​​​​в любом направлении.

    • 0
    • Отличный ответ, спасибо. Вопрос: Если кто-то использует удаленный GET в плагине для вызова веб-службы RESTful, размещенной разработчиком плагина, видите ли вы какие-либо потенциальные проблемы с безопасностью? Например, если «Плагин ACME для WordPress» используется wp_remote_get() на странице api.acme.com/stuff, как вы думаете, есть ли потенциальная проблема, если мы его отключим 'sslverify' ?

      • 0
    • Последствием безопасности является то, что вы можете быть уязвимы для атаки «человек посередине», например, через отравление DNS или скомпрометированную точку доступа WiFi. По сути, когда вы подключаетесь к api.example.com, у вас нет возможности узнать, действительно ли это api.example.com, с которым вы разговариваете, или какая-то другая система, выдающая себя за api.example.com. Без sslverify (в curl это называется CURLOPT_SSL_VERIFYPEER) любой может перехватить ваши сообщения, притвориться кем-то, кем он не является, и вы не сможете об этом сказать. Проверка сертификатов исключает эту возможность.

      • 0
    • и @MeanderingCode — Попался, спасибо! Если это код, работающий только как плагин, то точки доступа Wi-Fi на самом деле не проблема, но мошеннический интернет-провайдер может быть прав? Безопасность не была моей сильной стороной, но я доберусь туда.

      • 0
    • Что ж, все, что может попасть между вашим сервером и сервером, с которым он связывается, потенциально может перехватить связь и заменить ее чем-то другим. Каковы последствия этого для безопасности, зависит от того, что именно вы отправляете/получаете между серверами.

      • 0

Оставить ответ

You must login to add an answer.