Добавить центры сертификации всей системы на Firefox

27

Я хочу добавить несколько корневых ЦС, которые не поставляются с Firefox по умолчанию в Ubuntu, но я не знаю как.

Я попытался добавить их в локальные сертификаты certutil, но это не сработало. Это испортило мою базу данных сертификатов.

$ certutil -A -d .mozilla/firefox/kek3dogy.default/ -i /usr/local/share/ca-certificates/FNMT_ACRAIZ.crt -n "Certificado Raiz FNMT" -t "TCu,Cuw,Tuw"

а потом

$ certutil -L -d .mozilla/firefox/kek3dogy.default/

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

Go Daddy Secure Certification Authority                      ,,   
VeriSign Class 3 Secure Server CA - G3                       ,,   
VeriSign Class 3 Extended Validation SSL CA                  ,,   
DigiCert High Assurance CA-3                                 ,,   
GlobalSign Domain Validation CA - G2                         ,,   
GeoTrust SSL CA                                              ,,   
StartCom Class 2 Primary Intermediate Server CA              ,,   
Google Internet Authority                                    ,,   
Certificado Raiz FNMT                                        CT,C,c
USERTrust Legacy Secure Server CA                            ,,   
HP Jetdirect 2B0EAD20                                        ,,   
Akamai Subordinate CA 3                                      ,,   
VeriSign, Inc.                                               ,,   
Thawte SGC CA                                                ,,   
VeriSign Class 3 Secure Server CA - G2                       ,,

Сертификат не будет отображаться в Firefox. Я пробовал это несколько раз, даже удаляя профиль, и он один раз обнаружился на интерфейсе Firefox, но совершенно пустой.

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

Если нет общесистемной базы данных, которую я могу изменить, я могу положиться на стартовый скрипт X (как /etc/X11/Xsession.d/таковой или скрипт, вызываемый системой автозапуска xdg /etc/xdg/autostart/) для изменения профиля пользователя при запуске сеанса, но мне нужно решение, которое работает. Я даже не могу загрузить сертификаты на профили пользователей из командной строки!

Хорхе Суарес де Лис
источник
Является ли редактирование профиля по умолчанию одним из вариантов (чтобы новые добавленные сертификаты добавлялись при создании нового профиля, но старые профили оставались без изменений)?
Андреа Корбеллини
Нет, около +100 профилей уже существует, а новые профили - это редкость.
Хорхе Суарес де Лис
Не можете ли вы создать новую папку профиля в каталоге Firefox, а затем добавить ее в profiles.ini? Затем вы можете добавить свои изменения к нему, а затем скопировать его и profiles.iniв каждый каталог пользователя.
Уилф
NB Вы можете редактировать профили для Firefox, запустив firefox -p- но сначала вы должны закрыть Firefox.
Уилф
Нет, есть +100 пользователей с их уже существующим профилем. Им не понравится терять свои закладки, историю, пароли и т. Д.
Хорхе Суарес де Лис

Ответы:

20

Проблема в том, что у Firefox нет «центрального» расположения, где он ищет сертификаты. Просто смотрит в текущий профиль. Вот почему изменение /usr/share/ca-certificatesили другие подобные каталоги не будут работать с Firefox. Это то, что запрашивалось годами; см. выпуски 620373 , 449498 и 454036 (и, вероятно, есть много других).

Таким образом, у вас есть только два вида решений: либо измените каждый профиль, либо измените поведение Firefox. Я знаю, что это не то, что вы ищете, но нет никаких путей, потому что Firefox просматривает только профили пользователей.

Сказав это, я бы выбрал решение с использованием жестких или символических ссылок, в частности, я бы использовал жесткие ссылки. Это решение, безусловно, самое простое и, вероятно, лучше, хотя у меня недостаточно информации, чтобы судить.

Что вам нужно сделать, это в основном удалить все cert8.dbи key3.dbфайлы для каждого профиля и заменить их ссылками на «наиболее полный» cert8.dbи key3.db. Если вы идете с жесткими ссылками, оригинал cert8.dbи key3.dbбудет неотличим от новых.

Не забудьте настроить разрешения в соответствии с вашими потребностями. Скорее всего, вам нужно будет, chmod a+rwчтобы каждый мог добавить / удалить сертификат. Если вы хотите, чтобы только определенные пользователи могли добавлять / удалять сертификаты, вы можете создать группу, назначить две базы данных этой группе и дать +wразрешение только группе.

Андреа Корбеллини
источник
Да, так же, как я мог придумать. Это немного стыдно за Firefox, IMO.
gertvdijk
Но не перезаписать ли пользовательские сертификаты? Разве там не хранятся пользовательские сертификаты?
Хорхе Суарес де Лис
@ JorgeSuárezdeLis: хорошо, когда вы удалите эти файлы, вы потеряете сертификаты. Если это то, что вы имеете в виду под «перезаписью», тогда да. Сначала вы должны объединить все базы данных в одну, а затем приступить к созданию жестких ссылок.
Андреа Корбеллини
Но ... я не хочу, чтобы у одного пользователя были личные сертификаты других! Я говорю сейчас об их сертификатах, а не о центрах сертификации.
Хорхе Суарес де Лис
@ JorgeSuárezdeLis: извините, я не могу понять: что такое личные сертификаты ?
Андреа Корбеллини
15

Самый простой способ - импортировать сертификат в пример профиля Firefox, а затем скопировать cert8.db пользователям, которым вы хотите предоставить сертификат.

Сначала импортируйте сертификат вручную в профиль firefox пользователя-образца. Затем скопируйте

/home/${USER}/.mozilla/firefox/${randomalphanum}.default/cert8.db

в профили пользователей Firefox. Вот и все. Если вы хотите убедиться, что новые пользователи получают сертификат автоматически, скопируйте cert8.dbв:

/etc/firefox-3.0/profile

Вот альтернативный способ, который не отменяет существующие сертификаты: [фрагмент bash для систем Linux]

certificateFile="MyCa.cert.pem"
certificateName="MyCA Name" 
for certDB in $(find  ~/.mozilla* ~/.thunderbird -name "cert8.db")
do
  certDir=$(dirname ${certDB});
  #log "mozilla certificate" "install '${certificateName}' in ${certDir}"
 certutil -A -n "${certificateName}" -t "TCu,Cuw,Tuw" -i ${certificateFile} -d ${certDir}
done

Вы можете найти certutil в пакете libnss3-tools (debian / ubuntu).

Смотрите также: Программный импорт сертификата CA

Источник: программно установить сертификат в Mozilla

TomKat
источник
+1, но если вы проголосуете за это, возможно, вам следует также проголосовать за ответы на StackOverflow, из которых он был получен.
tripleee
4

Вопреки распространенному мнению, вы можете заставить Firefox просматривать системные сертификаты вместо своего собственного жестко запрограммированного набора.

Для этого вам понадобится пакет под названием p11-kit . p11-kit обеспечивает замену libnssckbi.soобщей библиотеки, содержащей жестко закодированный набор сертификатов. Версия p11-kit вместо этого считывает сертификаты из системного хранилища сертификатов.

Поскольку Firefox поставляется с собственной версией libnssckbi.so, вам нужно отследить и заменить ее вместо версии, представленной в libnss3:

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

Затем удалите ~/.pkiкаталог, чтобы Firefox обновлял свою базу данных сертификатов (заставляя его извлекать системные сертификаты) после перезапуска Firefox. Примечание: это удалит все существующие сертификаты в хранилище, поэтому, если есть пользовательские сертификаты, которые вы добавили вручную, вы можете создать резервную копию этой папки и затем повторно импортировать их.

Уилер
источник
Ого, это что-то вроде хака, но +1. Возможно, вы захотите добавить dpkg-divertшаг, чтобы избежать повторной перезаписи файла APT при обновлении пакета Firefox.
gertvdijk
@wheeler. Вы знаете, если это все еще работает? Я попробовал это с Ubuntu 18.04, и после этого Firefox вообще не будет загружать какие-либо сертификаты. Есть p11-kit 0.23.9-2
Кевин Васко
1

Одной из функций дополнения Firefox мастера CCK является импорт сертификатов CA. Я использую это дополнение для создания пользовательского дополнения, в которое входит компания CA Cert. Затем я упаковываю пользовательский xpi в .deb во внутреннем репозитории, с которого все рабочие станции получают обновления.

CCK Wizard

РЕДАКТИРОВАТЬ: Чтобы упаковать xpi для Ubuntu, вам нужно создать пакет, который включает в себя каталог / usr / lib / firefox-addons / extensions / [addon-name @ servername] и разархивировать все содержимое xpi в этот каталог , Например, если вы называете свой аддон foobarbaz и сервер, с которого он настроен для обновления (если вы должны были включить эту функцию), является intranet.example.com, то каталог будет foobarbaz@intranet.example.com. Я никогда не включаю автоматическое обновление, а вместо этого обновляю deb в репо.

Бенджамин Лонг
источник
Я предпочитаю этот метод другим, потому что он самодостаточен и может включать множество других настроек в одном месте. Автор, похоже, удалил свое расширение из AMO. Теперь у него есть это на его собственном сайте здесь , и последний xpi здесь .
Амит Найду
1

Firefox работает после чистой установки. Если база данных сертификатов в cert8.dbудалена, она восстанавливается при следующем запуске Firefox. Это настоятельно предполагает наличие общесистемного хранилища сертификатов CA по умолчанию.

Исходный код Firefox показывает, что встроенные сертификаты CA фактически жестко запрограммированы в firefoxисполняемый файл. Они находятся в security / nss / lib / ckfw / builtins / certdata.txt

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

yanychar
источник
1

Я использую приложение «User Environment Virtualization» (UEV), которое делает это для моих пользователей, но вы можете сделать это с помощью сценариев входа в Windows-клиенты точно так же. Я не буду публиковать весь код для динамического поиска пути% APPDATA% \ Mozilla \ Firefox \% PROFILE%, но когда вы его найдете, вы можете импортировать сценарии с помощью некоторых основных команд. Я в основном читаю файл Firefox profiles.ini, чтобы определить путь к профилю Firefox / cert8.db.

Вы можете посмотреть на использование приложения certutil.exe. https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/tools/NSS_Tools_certutil

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

Вот «ядро» моего скрипта импорта сертификата vb:

If Instr(strLine,"Path=Profiles/") Then
  arrLine = Split(strLine, "/")
  strProfile = strAppData & "\Mozilla\Firefox\Profiles\" & arrLine(1)
  strCertDB = strProfile & "\cert8.db"

  'Verify the DB exists, if not move to the next entry
  If objFSO.FileExists(strCertDB) Then
    'Run certutil command on this database
    strCertCommand1 = "\\SERVERNAME\SHARENAME$\certs\certutil\certutil.exe -A " &_
    "-n MYCA -t ""CT,C,C"" -d " & strProfile & " -i \\SERVERNAME\SHARENAME$\certs\MYCA_Root.cer"

    strCertCommand2 = "\\SERVERNAME\SHARENAME$\certs\certutil\certutil.exe -A " &_
    "-n MYSECONDCA -t ""CT,C,C"" -d " & strProfile & " -i \\SERVERNAME\SHARENAME$\certs\SecondCA_Root.cer"

    strCertCommand3 = "\\SERVERNAME\SHARENAME$\certs\certutil\certutil.exe -A " &_
    "-n MYTHIRDCA -t ""CT,C,C"" -d " & strProfile & " -i \\SERVERNAME\SHARENAME$\certs\ThirdCA_Root.cer"

    'Run the import commands for this Firefox profile
    objShell.Run("%comspec% /c " & strCertCommand1),0,TRUE
    objShell.Run("%comspec% /c " & strCertCommand2),0,TRUE
    objShell.Run("%comspec% /c " & strCertCommand3),0,TRUE
Тони Масса
источник
1

Я обнаружил, что большую часть времени и по умолчанию, если не настроен иначе, Firefox использует устаревшие базы данных безопасности (cert8.db, key3.db и secmod.db), что означает, что вам нужно будет использовать другую командную строку для введения сертификата в правильная база данных, которую использует Firefox. (см. больше от человека certutil)

поэтому, если ваша система использует базу данных по умолчанию, команда должна выглядеть следующим образом: (dbm)

certutil -A -n "Description Name" -t "CT,C,C" -d dbm:/home/<username>/.mozilla/firefox/<default folder>/ -i certificate.crt

в противном случае это должно быть так: (sql)

certutil -A -n "Description Name" -t "CT,C,C" -d sql:/home/<username>/.mozilla/firefox/<default folder>/ -i certificate.crt

от man certutil:

-d [prefix]directory
Specify the database directory containing the certificate and key
database files.

certutil supports two types of databases: the legacy security databases
(cert8.db, key3.db, and secmod.db) and new SQLite databases (cert9.db,
key4.db, and pkcs11.txt).

NSS recognizes the following prefixes:

·   sql: requests the newer database

·   dbm: requests the legacy database

If no prefix is specified the default type is retrieved from
NSS_DEFAUL
Асаф Маген
источник
Использование моих .pem файлов с первой certutilкомандой сработало. Я искал для автоматизации однопользовательский сценарий установки, и это делает свое дело. Вам нужно apt-get install libnss3-toolsбудет иметь certutil.
xificurC