Таким образом, поскольку у обновления Mavericks есть больше проблем с сертификатами.
При попытке свернуть файл с моего веб-сервера с помощью его самозаверяющего сертификата он получал сообщение об ошибке «Сертификат SSL: недопустимая цепочка сертификатов».
Это было исправлено путем добавления сертификата в мою системную цепочку для ключей и установки его для разрешения SSL, информация, которую я нашел здесь и здесь .
Это работает нормально, и когда я заворачиваю файл, он загружается правильно.
Однако, если я запускаю curl с помощью sudo (например, у меня есть скрипт, который нужно запустить с помощью sudo и выполняет в нем curl), то я возвращаюсь к тому же сообщению об ошибке.
Я предполагаю, что root не читает из системной цепочки для ключей, возможно?
Кто-нибудь знает способ это исправить?
root
-доступно.curlrc
вместо--insecure
. Что именно так и сказано - для злоумышленника, находящегося в сетевой позиции, сделать это было бы тривиально для MITM и внедрить код.Root не читает из текущих настроек доверия пользователя, но есть как настройки доверия администратора, так и настройки доверия пользователя root. (Они также отличаются от настроек доверия системы .) Также обратите внимание, что настройки доверия сертификата несколько отличаются от простого добавления сертификата в цепочку ключей; Вы можете пометить сертификат как доверенный, не добавляя его полностью. (Точная ситуация здесь мне не ясна, и документы, которые я видел, расплывчаты.)
Вы можете пометить сертификат как доверенный для текущего пользователя как
но это не помогает с рутом. Решение, как вы можете теперь догадаться, заключается либо в
sudo
приведенном выше, который затем помечает его как доверенного для пользователя root:или использовать
-d
флаг, чтобы добавить его в настройки доверия администратора:(OS X откроет диалоговое окно с паролем, чтобы подтвердить это.)
Любой из последних двух кажется достаточным для
sudo curl
.Ссылка: https://developer.apple.com/library/mac/Documentation/Darwin/Reference/ManPages/man1/security.1.html
источник
Это действительно в выходной подсказке:
Преимущество использования вышеуказанного решения заключается в том, что оно работает для всех
curl
команд, но это не рекомендуется, поскольку оно может вводить атаки MITM при подключении к незащищенным и ненадежным хостам.источник
Если вы используете MacPorts (и третья сторона сценарий вы упомянули не удаляет его из
$PATH
или вызовов/usr/bin/curl
) вы можете установитьcertsync
иcurl
порты в этом порядке.certsync
это инструмент и соответствующий список launchd, который будет экспортировать вашу системную цепочку для ключей$prefix/etc/openssl/cert.pem
и установить символическую ссылку,$prefix/share/curl/curl-ca-bundle.crt -> $prefix/etc/openssl/cert.pem
чтобы MacPorts curl автоматически брал сертификаты.certsync
также автоматически обновит сгенерированные файлы при изменении системной цепочки для ключей.источник
Документация, которую вы ищете, находится здесь. В нем объясняется, как использовать cURL на Mavericks и как предоставлять ваши сертификаты: http://curl.haxx.se/mail/archive-2013-10/0036.html
источник
Чтобы заставить
sudo curl
работать (на OSX Sierra), нам пришлось импортировать сертификат вSystem.keychain
и доверять ему там. Это можно сделать вручную в приложении Keychain или с помощью этой команды:Было важно как указать, так
-d
и вручную установить путь к системной цепочке-k
для ключей, чтобы убедиться, что сертификат действительно импортируется туда, если это еще не сделано.Команда работает без
sudo
, но затем запрашивает пароль через диалоговое окно пользовательского интерфейса, что может быть препятствием для сценариев.источник
SecCertificateCreateFromData: Unknown format in import.