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

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

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

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

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

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

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

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

10

7 Відповіді

Якщо ви зберігаєте сертифікати ЦС у файловій системі (у форматі PEM), ви можете визначити завивку для використання з ними

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

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

sudo curl --insecure ...

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

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

cacert=/path/to/my/certs.pem
13
додано
+1 для налаштування кореня -доступного .curlrc замість --insecure . Що саме так і говориться - для того, щоб зловмисник, що перебуває в мережі, зробив це, було б тривіально для MITM і коду ін'єкції.
додано Автор Wyzard, джерело
Дякуємо за вашу відповідь, скрипт, який виконується за допомогою sudo, є з третьої сторони, і тому я не можу змінити команду curl. Небезпечний не є опцією. Чи можна це зробити глобально?
додано Автор Flask, джерело
Дякуємо за це, звучить як те, що я шукаю. Я спробую це завтра і нагороду баунті, якщо він працює.
додано Автор Flask, джерело
Ви можете створити файл .curlrc і зберегти його у вашій домашній теці, хоча за допомогою sudo може знадобитися /var/root/.curlrc. Файл повинен містити параметри без дефісів, по одному на рядок. Так "cacert =/path/to/my/certs.pem"
додано Автор Jörg W Mittag, джерело

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

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

$ 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 .

Reference: https://developer.apple.com/library/mac/Documentation/Darwin/Reference/ManPages/man1/security.1.html

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

Це дійсно в підказці виводу:

echo insecure >> ~/.curlrc

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

3
додано

Один із способів виправити це - дозволити curl повністю пройти перевірку ланцюжка сертифікатів:

$ sudo curl -k https://example.com
1
додано
На жаль! Це фактично вже згадується @Dan з --insecure , що є довгою формою прапора -k .
додано Автор mHelpMe, джерело
@JacobTomlinson як це гірше, ніж за допомогою самозаписуваних сертифікатів? )))
додано Автор mHelpMe, джерело
Плюс він перемагає точку використання https.
додано Автор Flask, джерело
Ви відповідаєте на коментар, який я зробив більше чотирьох років тому. Сертифікати, що підписуються самостійно, добре, але громіздкі, тому що ви повинні керувати ланцюжком cert на ваших пристроях або навчати користувачів поганим звичкам, як ігнорувати помилки сертифіката. Нехтування цією ланкою сертифікатів разом відкриває вам людину середніх атак.
додано Автор Flask, джерело

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

certsync is a tool and a corresponding launchd plist that will export your system keychain to $prefix/etc/openssl/cert.pem and install a symlink $prefix/share/curl/curl-ca-bundle.crt -> $prefix/etc/openssl/cert.pem so MacPorts curl will automatically pick up the certificates. certsync will also automatically update the generated files when you change your system keychain.

1
додано
Спасибі за це, я хотів би уникати використання MacPorts, якщо це можливо, хоча.
додано Автор Flask, джерело

Щоб зробити 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 , але потім запитає пароль через діалогове вікно інтерфейсу користувача, що може бути перешкодою для сценаріїв.

0
додано
Я отримую помилку SecCertificateCreateFromData: Невідомий формат при імпорті.
додано Автор rraallvv, джерело

The documentation you are looking for is here. It explains how to use cURL on Mavericks and how to supply your certificates: http://curl.haxx.se/mail/archive-2013-10/0036.html

0
додано