148

Моя работа решила выпустить свой собственный центр сертификации (CA) для безопасной обработки различных аспектов нашей работы без оплаты сертификатов.

  • Криптографически подписывать письма
  • Шифровать содержимое электронной почты
  • Сделайте доступ к таким вещам, как клиентский сертификат IRC компании
  • Отзывать ключи бывших сотрудников автоматически

Они прислали мне файл .pem , и я не уверен, как добавить его в мою установку Ubuntu. Отправленные инструкции были следующими: «Двойной щелчок по нему на Mac должен установить его». 

Как мне поступить? Нужно ли что-то делать с OpenSSL для создания .key , .csr или .crt ?

8 ответов8

203

Установка ЦС

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

Затем запустите sudo update-ca-certificates .

Предупреждения: эта установка влияет только на продукты, которые используют это хранилище сертификатов. Некоторые продукты могут использовать другие магазины сертификатов; если вы используете эти продукты, вам необходимо добавить этот сертификат CA и в другие хранилища сертификатов. (Инструкции Firefox, Инструкции Chrome, Инструкции Java)

Тестирование CA

Вы можете проверить, сработало ли это, посмотрев сертификат, который вы только что добавили в /etc/ssl/certs/ca-certificates.crt (который представляет собой длинный список всех соединенных вместе доверенных ЦС).

Вы также можете использовать OpenSSL s_client, пытаясь подключиться к серверу, который, как вы знаете, использует сертификат, подписанный только что установленным ЦС.

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

Первое, что нужно искать, это цепочка сертификатов в верхней части выходных данных. Это должно показать CA как эмитент (рядом с i: . Это говорит о том, что сервер представляет сертификат, подписанный устанавливаемым центром сертификации.

Во-вторых, ищите verify return code в конце, который должен быть установлен в 0 (ok) .

58

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 .

15

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

После копирования файла вы должны выполнить sudo update-ca-certificates .

13

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

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

Например, чтобы доверять сертификату корневого ЦС для выдачи сертификатов сервера SSL, используйте

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

Где <certificate nickname> является произвольным, а <certificate filename> - вашим файлом .pem или .crt.

Другие полезные ссылки:

9

Для новых сборок, основанных на Debian, вам может потребоваться выполнить:

sudo dpkg-reconfigure ca-certificates

ПРИМЕЧАНИЕ: sudo dpkg-переконфигурирует ca-Certificates внутренне, вызывает update-ca-сертификаты

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

2

Опираясь на 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 чтобы добавить свои CA для каждого приложения, для каждого пользователя.

В других дистрибутивах, таких как Fedora, такого рода вещи просто работают, и вам следует сообщать об ошибке в любые приложения, которые не доверяют автоматически установленным CA с помощью update-ca-trust .

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

После этого вы получите настроенные доверительные корни системы, а не некоторые жестко-закодированных из них. Обратите внимание, что Ubuntu поставляет несколько разных копий этой библиотеки libnssckbi.so с жестко заданными доверительными корнями, и вам необходимо заменить их все!

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

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

Был ключ к моему успеху после следующего: совет Стивена Понедельника

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .