Додайте повноваження сертифікатів у всій системі на 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до кожного каталогу користувача.
Вільф

Примітка. Ви можете редагувати профілі для 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 (debian / ubuntu).

Дивіться також: Програмний імпорт сертифіката CA

Джерело: Програмно встановити сертифікат у Mozilla


+1, але якщо ви підтверджуєте це, ви, можливо, також повинні відповісти на відповіді на StackOverflow, з яких це було отримано.
трійчатка

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

Однією з особливостей доповнення CCK Wizard Firefox є імпорт сертифікатів CA. Я використовую цю надбудову для створення власної надбудови, яка включає компанію CA Cert. Потім я пакую користувальницький xpi у .deb у внутрішньому сховищі, з якого отримують оновлення всіх робочих станцій.

Майстер CCK

EDIT: Для того, щоб упакувати xpi для Ubuntu, вам потрібно створити пакет, що включає каталог / usr / lib / firefox-addons / extensions / [addon-name @ ім'я сервера] і розпакуйте весь вміст xpi в цей каталог . Наприклад, якщо ви називаєте свій аддон foobarbaz та сервер, на якому він встановлений для оновлення (якщо ви ввімкнули цю функцію) є intranet.example.com, то каталог буде foobarbaz@intranet.example.com. Я ніколи не включаю автоматичне оновлення, а натомість оновлюю деб в репо.


Я віддаю перевагу цьому методу перед іншими, оскільки він є автономним і може включати в себе багато інших налаштувань. Здається, автор видалив його розширення з AMO. Зараз він має його на своєму власному сайті тут , і останні xpi є тут .
Аміт Найду

1

Firefox працює після чистої установки. Якщо база даних сертифікатів у програмі cert8.dbвидалена, вона регенерується при наступному запуску Firefox. Це настійно говорить про те, що за замовчуванням існує системне зберігання сертів CA.

Вихідний код Firefox показує, що вбудовані сертифікати CA насправді важко закодовані у firefoxвиконанні. Вони проживають у безпеці / nss / lib / ckfw / buildins / certdata.txt

Тому немає можливості встановити систему сертифікатів у цілому. Будьте уважні, що виправлення вихідного коду може спричинити проблеми з правами інтелектуальної власності.


1

Я використовую додаток "Віртуалізація середовища користувача" (UEV), який робить це для моїх користувачів, але ви можете це зробити за допомогою скриптів для входу в клієнтах Windows точно так само. Я не публікую весь код, щоб динамічно знаходити шлях% APPDATA% \ Mozilla \ Firefox \% PROFILE%, але коли ви знайдете його, ви можете імпортувати скрипти, використовуючи деякі основні команди. Я в основному читаю файл Firefox profile.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

від людини:

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