Як додати сертифікат (CA) до Ubuntu?


166

Моя робота вирішила видати власну службу сертифікації (CA) для безпечного управління різними аспектами нашої роботи, не платячи за сертифікати.

  • Криптографічно підпишіть електронні листи
  • Шифруйте вміст електронної пошти
  • Зробіть доступ до таких речей, як компанія, заснована на сертифікаті клієнтів IRC .
  • Відкликайте ключі колишніх співробітників автоматично

Вони надіслали мені .pemфайл, і я не знаю, як додати його до моєї установки Ubuntu. Надіслані інструкції були: "Подвійне клацання на ньому на Mac має встановити його". 

Як мені діяти? Чи потрібно мені що - то робити з OpenSSL , щоб створити .key, .csrабо .crtфайл?


1
коментар "Надіслані інструкції були: \" Подвійне клацання на ньому на Mac має встановити його. \ "" зробив мій день
mzoll

Відповіді:


231

Встановлення ЦА

Скопіюйте свій сертифікат у форматі PEM (формат, який ----BEGIN CERTIFICATE----у ньому є) /usr/local/share/ca-certificatesта назвіть його .crtрозширенням файлу.

Потім бігайте sudo update-ca-certificates.

Застереження: ця установка впливає лише на продукти, що використовують цей магазин сертифікатів. Деякі продукти можуть використовувати інші магазини сертифікатів; якщо ви користуєтесь цими продуктами, вам потрібно буде додати цей сертифікат CA і в інші магазини сертифікатів. ( Firefox Інструкція , Chrome Інструкція , Java Інструкція )

Тестування СА

Ви можете переконатися, що це спрацювало, шукаючи сертифікат, який ви щойно додали /etc/ssl/certs/ca-certificates.crt(що є лише довгим списком усіх об'єднаних вами довірених ЦС разом).

Ви також можете використовувати s_client OpenSSL, намагаючись підключитися до сервера, який, як відомо, використовує сертифікат, підписаний CA, який ви тільки що встановили.

$ openssl s_client -connect foo.whatever.com:443 -CApath /etc/ssl/certs

CONNECTED(00000003)
depth=1 C = US, ST = Virginia, O = "Whatever, Inc.", CN = whatever.com, emailAddress = admin@whatever.com
verify return:1
depth=0 C = US, ST = Virginia, L = Arlington, O = "Whatever, Inc.", CN = foo.whatever.com
verify return:1
---
Certificate chain
 0 s:/C=US/ST=Virginia/L=Arlington/O=Whatever, Inc./CN=foo.whatever.com
   i:/C=US/ST=Virginia/O=Whatever, Inc./CN=whatever.com/emailAddress=admin@whatever.com

... snip lots of output ...

    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1392837700
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

Перше, на що слід звернути увагу - це ланцюжок сертифікатів біля верхньої частини виводу. Це має відображати ЦП як емітента (поруч із i:). Це говорить про те, що сервер представляє сертифікат, підписаний ЦА, який ви встановлюєте.

По-друге, шукайте verify return codeкінець, який буде встановлено 0 (ok).


3
це насправді працює
Сабарееш Ккан

1
Дякуємо, що зауважили, що Firefox / chrome не використовують магазин cert за замовчуванням.
Тім Стрійдхорст

4
Зауважте, що сертифікати update-ca можуть бути дуже вибагливими (можливо, за дизайном). mycert.pem.crt НЕ працював, але mycert.crt зробив. Я також вважаю, що це повинні бути / usr / local / share / ca-сертифікати, а не / usr / share / ca-сертифікати (незважаючи на те, що в коментарях сказано в /etc/ca-certificate.conf).
лабіринт

2
Дякую за crtкоментар із розширенням, що був секретом отримання цієї роботи для мене, мені дали сертифікат із certрозширенням і був розгублений, чому нічого не працює.
Викуп Бріггса

3
Одне застереження: s_clientне надсилає SNI за замовчуванням, і серверу може знадобитися SNI, особливо якщо він підтримує віртуальних хостів / сайти з різними сертифікатами; для цього випадку додайте -servername foo.whatever.com. Або якщо це використання веб- сервера (сучасні версії) curlабо wgetякі SNI роблять автоматично.
dave_thompson_085

65

man update-ca-сертифікати :

update-ca-certificates  is  a  program  that  updates   the   directory
/etc/ssl/certs to hold SSL certificates and generates certificates.crt,
a concatenated single-file list of certificates.

It reads the file /etc/ca-certificates.conf. Each line gives a pathname
of  a  CA  certificate  under /usr/share/ca-certificates that should be
trusted.  Lines that begin with "#" are comment lines and thus ignored.
Lines  that  begin with "!" are deselected, causing the deactivation of
the CA certificate in question.

Furthermore   all   certificates   found   below   /usr/local/share/ca-
certificates are also included as implicitly trusted.

З вищесказаного я б зробив висновок, що кращим способом потрапляння локальних файлів сертифікатів у надійний магазин є їх розміщення /usr/local/share/ca-certificatesта запуск update-ca-certificates. Не потрібно чіпати /etc/ssl/certsбезпосередньо.


23
Імовірно, потрібно також називати сертифікати з розширеннями .crt.
фізома

Дякую за зауваження @phyzome - інакше не зміг би додати свою версію.
Сейрія

Довелося додати, --freshщоб він працював. наприкладupdate-ca-certificates --fresh
Ілля Лінн

15

У мене була така ж проблема, і мені довелося скопіювати .pemфайл /usr/local/share/ca-certificates, перейменувавши його як .crt. .cerФайл може бути легко перетворений в .pem, з OpenSSL, наприклад, якщо ви не маєте .pem.

Після копіювання файлу необхідно виконати sudo update-ca-certificates.


openssl x509 -inform DER -in certificate.cer -out certificate.crt
webwurst

14

Інші відповіді щодо update-ca-certificatesправильних для програм, які читають із сховища системних сертифікатів. Для Chrome і Firefox, і, напевно, деяких інших, сертифікат повинен бути поміщений у nssdb, підпорядкований для бібліотеки Mozilla NSS

З https://code.google.com/p/chromium/wiki/LinuxCertManagement :

Наприклад, для довіри кореневого сертифіката CA для видачі сертифікатів сервера SSL використовуйте

certutil -d sql: $ HOME / .pki / nssdb -A -t "C ,," -n <псевдонім сертифіката> -i <ім'я файлу сертифіката>

Де <certificate nickname>довільно, і <certificate filename>ваш файл .pem або .crt.

Інші корисні посилання:


Дякую. Він працює на Ubuntu 16.04 для Chrome 53.0.2785.143, але, здається, у Firefox 49 є окремий db магазину, і його потрібно додати приблизно: preferences # Advanced [Переглянути сертифікати] -> [Authorities] -> [Import] Детальніше про firefox cert store. askubuntu.com/a/248326/535154
mauron85

До речі, якщо ви хочете встановити cert перед першим запуском Chrome (тобто поки .pki / dir все ще відсутній), спершу потрібно створити nssdb:mkdir -p $HOME/.pki/nssdb && chmod -R 0700 $HOME/.pki && certutil -d sql:$HOME/.pki/nssdb -N --empty-password
akavel

Існує спосіб змусити Chrome і Firefox читати з магазину системних сертифікатів. Дивіться мою відповідь: superuser.com/a/1312419/506107
Wheeler

11

Для новіших збірок на основі Debian вам може знадобитися запустити:

sudo dpkg-reconfigure ca-certificates

ПРИМІТКА: sudo dpkg-переконфігуруйте ca-сертифікати викликає update-ca-сертифікати внутрішньо

Звичайно, вам потрібно буде скопіювати сертифікат (.crt файл) у / usr / share / ca-сертифікати, перш ніж робити щось із цього :)


3

Спираючись на dwmw2 в відповідь , ви можете сказати , додатки , які використовують NSS для його управління сертифікатами використовувати систему довіри магазин.

libnss3за замовчуванням постачається з набором кореневих сертифікатів CA (лише для читання libnssckbi.so) ( ), тому більшу частину часу вам потрібно вручну додати їх самостійно до локального магазину довіри користувачів, розташованого в $HOME/.pki/nssdb. p11-kitпропонує заміну для випадання, libnssckbi.soяка виконує функції адаптера до загальносистемних кореневих сертифікатів /etc/ssl/certs.

Редагувати:

Здається, там є більше версій libnssckbi.so, ніж просто в libnss3. Далі йде сценарій, щоб знайти їх усіх, створити резервну копію та замінити їх посиланнями на p11-kit:

sudo apt-get update && sudo apt-get install -y p11-kit libnss3
find / -type f -name "libnssckbi.so" 2>/dev/null | while read line; do
    sudo mv $line ${line}.bak
    sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so $line
done

Оригінальні інструкції:

Для цього встановіть p11-kitі libnss3(якщо вони вже не зняті):

sudo apt-get update && sudo apt-get install -y p11-kit libnss3

Потім створіть резервну копію існуючих, libnssckbi.soнаданих libnss3:

sudo mv /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so.bak

Нарешті, створіть символічне посилання:

sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so

Щоб підтвердити, що він працював, можна запустити, ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.soі на ньому повинно з’явитися посилання:

lrwxrwxrwx 1 root root 49 Apr  9 20:28 /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so -> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Тепер, якщо ви додасте сертифікат до магазину CA за допомогою update-ca-certificatesцих сертифікатів, тепер вони будуть доступні програмам, що використовують NSS ( libnss3), наприклад Chrome.


1

Як зазначалося, різні програми, що використовують NSS, мають власний магазин сертифікатів. Оскільки в Ubuntu ситуація стоїть, вам потрібно вручну використовувати certutilдля додавання ваших ЦС для кожної програми, для кожного користувача.

В інших дистрибутивах, таких як Fedora, подібні речі Just Works ™, і ви повинні подати помилку проти будь-яких додатків, які не довіряють автоматично ЦС, які ви встановлюєте update-ca-trust.

Ви також можете це виправити в Ubuntu, встановивши p11-kit-modulesпакет, а потім замінивши вбудований модуль кореневих довірок NSS p11-kit-trust.soна, зробивши символічне посилання, наприклад, з /usr/lib/firefox/libnssckbi.soна/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Після цього ви будете отримувати налаштовані довірчі коріння системи, а НЕ деякі жорстко-закодованих з них. Зауважте, що Ubuntu доставляє кілька різних копій цієї бібліотеки libnssckbi.so із жорстко кодованими довірчими коренями, і вам доведеться замінити їх усіх!

пор. https://bugs.launchpad.net/ubuntu/+source/nss/+bug/1647285


Коли я зробив sudo find / -type f -name "libnssckbi.so", він знайшов libnssckbi.soв трьох місцях: /usr/lib/thunderbird/, /usr/lib/firefox/і /usr/lib/x86_64-linux-gnu/nss/. Отже, ви говорите, що я повинен зв'язати libnssckbi.soвсі три ці папки p11-kit-trust.so?
Уїлер

1
Гаразд, щойно підтвердив, що зв'язування /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so-> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.soпрацює як ЧАРТ. Мені вдалося додати сертифікат /usr/local/share/ca-certificates, запустити sudo update-ca-certificatesі PRESTO, Chrome почав приймати сертифікати, що підписуються самостійно.
Уїлер

0

Серйозно дурна відповідь, щоб додати сюди, але я провів 2 години, рухаючись туди-сюди з certutils в Linux ... Я був впевнений, що все правильно:

hutber@hutber-mint /var/www/asos-mvt-framework $ certutil -L -d sql:${HOME}/.pki/nssdb

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

anyproxy                                                     CT,, 
rootCA                                                       CT,, 
myasos                                                       CT,, 

Але все-таки в хромі нічого не працювало. Я все спробував, врешті-решт….

Restarting Chrome

Це було запорукою мого успіху після наступного: поради Стівена Понеділка

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.