Как сохранить текущий cacert.pem в целях безопасности при использовании curl?

Я хотел бы сохранить текущие корневые сертификаты для использования с внутренней командой tUR > cURL и PHP, однако в настоящее время нет параметра для загрузки текущего файла, который требуется для надлежащего безопасного соединения, и для поддержания его актуальности.

И пример использования curl в PHP для безопасного подключения, для которого требуется файл с именем cacert.pem (цепочка сертификатов, закодированная PEM для проверки удаленных подключений), выглядит следующим образом:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_CAINFO, "pathto/cacert.pem");
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
if (!($data = curl_exec($ch))) {
    echo "No data received";
} else {
    echo strlen($data) + " total byte(s)";
}
curl_close($ch);

В то время как большинство людей просто устанавливают CURLOPT_SSL_VERIFYPEER в false и, таким образом, игнорируют проблему, которая является плохим. Вы можете видеть здесь, где центр сертификации показывает, что если у вас нет текущего файла, единственный способ подключиться к защищенному серверу - отключить проверку сертификатов и далее предупреждает о последствиях, связанных с отключением проверки сверстников.

Я запрашиваю законный способ поддерживать локальную копию cacert.pem, поэтому, когда я использую curl в PHP для связи с другими серверами, я могу продолжать делать это безопасно.

Это не запрос для внешнего ресурса или ссылки за пределами сайта и т.д., однако из-за характера проблемы вполне вероятно, что это может быть ТОЛЬКО способ разрешить это, поскольку это потребует постоянного обновления, поскольку цепи сертификатов отозвана. На сегодняшний день невозможно получить этот файл как часть распределения самого скручивания, php или библиотеки curl для php и продолжать поддерживать его. Хотя это обескураживает, что это не то, что простая команда обновления, такая как curl --update-root-ca, будет приятной, она не существует в какой-либо форме.

Ответ 1

С самого начала написания этой статьи (и, следовательно, этой перезаписи) я смог решить свою собственную проблему, включив ссылки непосредственно в единственный законный источник для поддержки этого файла, который предоставляется на сайте, поддерживаемом автором curl at это местоположение

Кроме того, по мере продвижения технологии этот вопрос был обновлен, чтобы показать, как использовать curl в PHP и принудительно установить соединение TLS v1.2 (то, что некоторые поставщики транзакций требуют или рекомендуют, и не могут предоставлять информацию о том, как это сделать).

Что касается органов сертификации, существует несколько основных корневых полномочий, таких как:

  • Symantec
  • RapidSSL
  • Thawte
  • GeoTrust
  • Comodo

Как и другие авторитеты по своему характеру, такие как

  • Microsoft
  • Mozilla
  • Google

Какая может быть рамка для тех, кто хочет сохранить свой собственный cacert.pem. Имейте в виду, что вам нужно будет загрузить их списки отзыва (сертификаты, которые были нарушены или истекли) из соответствующего crl, чтобы поддерживать надлежащий механизм доверия, в то время как вы должны быть в состоянии избежать загрузки только своих корневых цепочек сертификатов и использовать эти как локальный файл авторизации как ваш cacert.pem.

Ответ 2

cacert.pem используется curl. Нет никаких прав на сертификаты, которым доверяют, но списки, используемые веб-браузерами, являются хорошим источником. Эти списки постоянно обновляются из-за изменений ЦС и изменений в методах безопасности.

Авторы curl поддерживают инструмент, который может извлечь cacert.pem из Firefox, и опубликовать на своем сайте достаточно свежий вывод:

  • cacert.pem, созданный авторами curl
  • caextract: для обеспечения максимальной безопасности, загрузите инструмент, проверьте исходный код и запустите его против своего собственного Firefox.