Як виправити завиток: (60) Сертифікат SSL: Недійсний ланцюжок сертифікатів при використанні sudo


12

Отже, оскільки у Mavericks з оновленням curl виникає більше проблем із сертифікатами.

При спробі згортання файлу з мого веб-сервера з його самопідписаним сертифікатом з'явилася помилка "SSL Certificate: Недійсний ланцюжок сертифікатів".

Це було виправлено, додавши сертифікат до мого системного брелока та встановивши його завжди дозволяти SSL, інформацію, яку я знайшов тут і тут .

Це прекрасно працює, і коли я згортаю файл, він завантажується належним чином.

Однак якщо я раніше запускаю curl з sudo (наприклад, у мене є сценарій, який потрібно запускати з sudo і робить у ньому завиток), я повертаюся до того ж повідомлення про помилку.

Я здогадуюсь, що root, можливо, не читає з системного брелока?

Хтось знає спосіб виправити це?

Відповіді:


17

f, якщо ви зберігаєте свої сертифікати CA у файловій системі (у форматі PEM), ви можете сказати curl, щоб ними користуватися

sudo curl --cacert /path/to/cacert.pem ...

Ви також можете вимкнути перевірку сертифікату за допомогою

sudo curl --insecure ...

Редагувати: оновлено стосовно відгуків

Якщо ви хочете встановити це постійно, вам слід створити .curlrcфайли та розмістити їх у домашньому каталозі. sudoКоманди, можливо, знадобляться у цьому файлі /var/root. Файл має ті самі параметри, що й командний рядок, але без тире. Один варіант на рядок:

cacert=/path/to/my/certs.pem

Дякую за вашу відповідь, сценарій, який запускається з sudo, отриманий від третьої сторони, тому я не можу реально змінити саму команду curl. Небезпечно насправді не варіант. Чи можна це зробити глобально?
Джейкоб Томлінсон

Ви можете створити .curlrc файл і зберігати його у своїй домашній папці, хоча, використовуючи sudo, він може знадобитися /var/root/.curlrc. Файл повинен містити параметри без тире, по одному на рядок. Таким чином , "cacert = / шлях / до / мій / certs.pem"
Ден

1
+1 для налаштування root-доступного .curlrcзамість --insecure. Це точно так, як сказано - для зловмисника в мережевій позиції це робити було б тривіально до MITM та введення коду.
zigg

Дякую за це, звучить як те, що я шукаю. Я спробую це завтра і нагороду нагороджувати, якщо це спрацює.
Джейкоб Томлінсон

6

Корінь не зчитується з поточних налаштувань довіри користувачів, але є як налаштування довіри адміністратора, так і налаштування довіри для користувача root. (Вони також відрізняються від системних налаштувань довіри.) Зауважте також, що налаштування довіри сертифікатів дещо відрізняються від простого додавання сертифіката до брелка; ви можете позначити cert як надійний, не додаючи його повністю. (Точна ситуація тут мені незрозуміла, а документи, яких я бачив, є невиразними.)

Ви можете позначити cert як надійного для вашого поточного користувача

$ security add-trusted-cert /path/to/cert.pem

але це не допомагає корінню. Рішення, як ви вже зараз здогадуєтесь, є або sudoвищезгаданим, яке потім позначає його як довіреного користувачу root, зокрема:

$ sudo security add-trusted-cert /path/to/cert.pem

або використовувати -dпрапор, щоб додати його до налаштувань довіри адміністратора:

$ security add-trusted-cert -d /path/to/cert.pem

(OS X з'явиться діалогове вікно паролів для підтвердження цього.)

Будь-яке з двох останніх видається достатнім для sudo curl.

Довідка: https://developer.apple.com/library/mac/Documentation/Darwin/Reference/ManPages/man1/security.1.html


Як я вже говорив у запитанні, я додав їх до системних брелоків, а також брелоків для входу в систему.
Джейкоб Томлінсон

Ви насправді спробували те, що я запропонував? Я перевірив це, саме в тій ситуації, яку ви описуєте, і вона спрацювала. Мені не ясно в усіх подробицях - документація розпливчаста - але ви повинні знати, що налаштування довіри сертифікатів НЕ є досить синонімом простого додавання cert в брелок, і що настройки довіри адміністратора cert існують окремо від системи та налаштування користувача / брелоки. (Здається, у поєднанні також є певний набір користувальницьких налаштувань користувача.) Я відредагував свою відповідь, щоб бути зрозумілішим у цьому питанні. Спробуйте це рішення.
Уес

Так, я спробував це рішення, коли ви вперше опублікували його. Сертифікати знаходяться в системному брелоку і встановлюються як довірені. Ще не везе.
Якоб Томлінсон

5

Це дійсно в підказі про вихід:

echo insecure >> ~/.curlrc

Перевагою використання вищевказаного рішення є те, що він працює для всіх curlкоманд, але він не рекомендується, оскільки він може вводити MITM-атаки шляхом підключення до незахищених та ненадійних хостів.


2

Якщо ви використовуєте MacPorts (а згаданий вами сторонній скрипт не видаляє його $PATHі не дзвонить /usr/bin/curl), ви можете встановити certsyncі curlпорти в цьому порядку.

certsyncце інструмент та відповідний запущений пліст, який експортує ваш системний брелок до $prefix/etc/openssl/cert.pemта встановить $prefix/share/curl/curl-ca-bundle.crt -> $prefix/etc/openssl/cert.pemсимпосилання, щоб MacPorts curl автоматично забрав сертифікати. certsyncтакож автоматично оновлює створені файли при зміні системного брелока.


Дякую за це, я хотів би уникати використання MacPorts, якщо можливо, хоча.
Джейкоб Томлінсон


-1

Щоб зробити sudo curlроботу (на OSX Sierra), нам довелося імпортувати сертифікат у System.keychainта довірити його там. Це можна зробити вручну в додатку Keychain або за допомогою цієї команди:

sudo security add-trusted-cert -d -k /Library/Keychains/System.keychain /path/to/cert.pem

Важливо було і вказати, -dі вручну встановити шлях до системного брелока, -kщоб переконатися, що сертифікат дійсно імпортується туди, якщо його ще немає.

Команда працює без sudo, але потім запитає пароль через діалогове вікно інтерфейсу, що може бути перешкодою для сценаріїв.


Я отримую помилкуSecCertificateCreateFromData: Unknown format in import.
rraallvv

Хто б хто не виступав, будь ласка, знайте, що я чітко написав "на OSX Sierra", і це було робочим рішенням для нас. Якщо він не працює в нових версіях OSX, ніж це може бути, тому що підтримка OSX або інструментарій змінилися. Або проблема, як у попереднього коментатора, коли вхідний файл не підтримується у форматі (питання не вказує цього).
Олександр Климечек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.