Как мне сохранить мой cacert.pem актуальным по соображениям безопасности при использовании curl?
-
21-12-2019 - |
Вопрос
Я хотел бы сохранить мои корневые сертификаты актуальными для использования с внутренними cURL и PHP curl
команда, однако в настоящее время нет параметра для загрузки текущего файла, необходимого для надлежащего безопасного подключения и поддержания его актуальности.
И пример использования 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 для связи с другими серверами я могу продолжать это делать безопасно .
Это не запрос на внешний ресурс или ссылку за пределы сайта и т.д., Однако из-за характера проблемы, вероятно, это может быть единственным способом решить эту проблему, поскольку это потребует постоянного обновления по мере отзыва цепочек сертификатов.На сегодняшний день нет способа получить этот файл ни как часть дистрибутива самого curl, ни php, ни библиотеки curl для php и продолжать его поддерживать.Хотя обескураживает тот факт, что это не то, что нравится простой команде обновления curl --update-root-ca
было бы неплохо, но его не существует ни в какой форме.
Решение
С момента первоначального написания этой статьи (и, следовательно, этого переписывания) я смог решить свою собственную проблему, включив ссылки непосредственно на только законный источник для ведения этого файла, который предоставляется на сайте, поддерживаемом автором curl
около это место
Кроме того, по мере развития технологий этот вопрос был обновлен, чтобы показать, как использовать curl
в PHP и принудительно подключите TLS версии 1.2 (что-то, что требуют или рекомендуют некоторые поставщики транзакций и могут не предоставлять информацию о том, как это сделать).
Что касается центров сертификации, то существует несколько ключевых корневых центров, таких как :
- Symantec
- Быстрый рост
- оттаивать
- ГеоТруст
- Комодо
А также другие органы власти по своей природе, такие как
- Microsoft
- Мозилла
- Гугл
Который может стать основой для любого, кто хочет поддерживать свой собственный cacert.pem.Имейте в виду, что вам нужно будет загрузить их списки отзыва (сертификаты, которые были взломаны или срок действия которых истек) из соответствующих списков сертификации, чтобы поддерживать надлежащий механизм доверия, в то время как вам должно сойти с рук простое скачивание их цепочек корневых сертификатов и использование их в качестве локального файла авторизации в качестве вашего cacert.пэм.
Другие советы
cacert.pem
используется curl
.Не существует окончательного органа, которому следует доверять сертификаты, но списки, используемые веб-браузерами, являются хорошим источником.Эти списки постоянно обновляются в связи с изменениями в центрах сертификации и методах обеспечения безопасности.
Авторы curl
поддерживайте инструмент, который может извлекать cacert.pem
из Firefox и размещают достаточно актуальную информацию на своем сайте:
- cacert.pem сгенерировано авторами
curl
- извлекать:для тех, кто больше всего заботится о безопасности, скачайте инструмент, проверьте исходный код и запустите его в вашем собственном Firefox.