7

После создания нового центра сертификации, ручного импорта цепочки CA в браузер и проверки того, что браузеры могут доверять новым сертификатам, подписанным посредником, мы скопировали цепочку сертификатов CA (в формате pem и crt) на наши серверы Ubuntu в следующих каталогах:

  • / И т.д. / SSL / сертификаты /
  • / USR / местные / доли / CA-сертификаты /

Однако после этого приложения на компьютерах с Ubuntu, такие как wget/curl/java, все еще не доверяют соединениям, использующим новые сертификаты. Согласно другому посту, нам нужно запускать неинтерактивные ca-сертификаты или dpkg-reconfigure -f noninteractive ca-certificates на каждом компьютере, на котором есть сертификат, update-ca-certificates . Эти команды не только не работают, но и нецелесообразно запускать их на тысячах серверов. Мы используем CFEngine для управления конфигурацией, но, насколько я могу судить, у него, похоже, нет возможности для такого рода вещей.

Есть ли способ написать в Ubuntu неинтерактивное обновление доверенных сертификатов CA таким образом, чтобы это могло работать на тысячах компьютеров?

2 ответа2

6

Я согласен со всем, что упомянул БиллТор, но добавлю, что может потребоваться полная перестройка хранилища сертификатов, потому что иногда кажется, что update-ca-Certificates слишком старается, чтобы быть ленивым, и фактически не обновляет то, что должно ,

rm -f /usr/local/share/ca-certificates/certificate.crt
# --fresh is needed to remove symlinks to no-longer-present certificates
update-ca-certificates --fresh

Кроме того, обратите внимание, что после завершения update-ca-Certificates он должен связать файлы /etc/ssl/certs/*.pem с соответствующими сертификатами в /usr/local/share/ca-certificates/ или /usr/share/ca-certificates/ . Как упомянул BillThor, также будет символическая ссылка на файл с отпечатком в виде имени - он будет похож на 349f2832.0 .

Ls -l может подтвердить это:

--snip--
lrwxrwxrwx 1 root root     72 Feb  6  2014 Security_Communication_EV_RootCA1.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_EV_RootCA1.crt
lrwxrwxrwx 1 root root     69 Mar 25  2014 Security_Communication_RootCA2.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_RootCA2.crt
lrwxrwxrwx 1 root root     69 Feb  6  2014 Security_Communication_Root_CA.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_Root_CA.crt
lrwxrwxrwx 1 root root     61 Feb  6  2014 Sonera_Class_1_Root_CA.pem -> /usr/share/ca-certificates/mozilla/Sonera_Class_1_Root_CA.crt
--snip--

Также обратите внимание, что * .crt и * .pem - это один и тот же файл. Это означает, что исходный файл .crt должен быть в формате .pem.

Файл формата .pem выглядит так:

-----BEGIN CERTIFICATE-----
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
--snip--
IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
O+7ETPTsJ3xCwnR8gooJybQDJbw=
-----END CERTIFICATE-----

Вы можете проверить установку сертификата, запустив openssl для сертификата:openssl x509 -in /etc/ssl/certs/[certname].pem -noout -text и openssl x509 -in /usr/local/share/ca-certificates/[certname].pem -noout -text (конечно, заменяя [certname])

Вы должны увидеть обширную информацию о вашем сертификате, и оба должны совпадать (так как с символической ссылкой они должны быть в одном файле).

Если они не совпадают, вы должны повторно запустить update-ca-certificates --fresh

Если они вообще не выводят полезную информацию, то вам нужно проверить свой сертификат и убедиться, что он в правильном формате PEM.

РЕДАКТИРОВАТЬ: BillThor упомянул, что это не будет работать для Java, но похоже, что по крайней мере на Debian, хранилище сертификатов Java также обновляется с помощью инструмента update-ca-Certificates. Я не знаю о других вещах в linux, которые используют альтернативное хранилище сертификатов, кроме, возможно, Wine с приложением Adobe Air.

1

Такие инструменты, как update-ca-certificates гарантируют, что сертификат связан с символической ссылкой, которая соответствует хэш-значению сертификата. При развертывании сертификатов с использованием cfengine , я включаю шаг для добавления символической ссылки после копирования сертификата. Я обнаружил, что это проще определить, чем запускать программу при установке сертификата.

Java использует файл cacerts расположенный в каталоге установки. Вам нужно будет либо установить новый файл cacerts либо импортировать сертификат в файл cacerts . Кроме того, вы можете установить файл jssecacerts рядом с существующим файлом cacerts . В любом из этих файлов вы должны убедиться, что файл содержит все сертификаты, которым вы хотите доверять. Это может быть подмножеством набора по умолчанию. Самый простой и стабильный вариант - установить файл в версии Java по умолчанию. Сертификаты в cacerts периодически обновляются по мере того, как различные центры сертификации обновляют свои публичные доверительные сертификаты, поэтому вам потребуется поддерживать этот файл с течением времени.

В зависимости от того, какой браузер вы используете, вам может потребоваться установить сертификат в качестве доверенного сертификата в хранилище ключей браузера, которое может не являться ни одним из уже рассмотренных хранилищ.

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