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

Вопрос или проблема

Я хочу добавить несколько корневых ЦС, которых нет в стандартной версии 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/

Псевдоним сертификата                                         Атрибуты доверия
                                                             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/), чтобы изменить профиль пользователя при запуске сеанса, но мне нужно решение, которое работает. Я даже не могу загрузить сертификаты в профили пользователя из командной строки сейчас!

Проблема в том, что 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, а затем скопировать 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

Я нашел это решение для добавления сертификатов в Firefox на Ubuntu:

https://github.com/mozilla/policy-templates/#proxy

Просто нужно добавить этот файл в :

/usr/lib/firefox/distribution/

touch policies.json

В policies.json добавьте:

{
"policies": {
"Certificates": {
    "ImportEnterpriseRoots": true,
    "Install": [
               "somecert1.crt",
               "usr/local/share/ca-certificates/somecert1.crt"
               ]
         }
    }
}

Часть установки – это сначала имя сертификата, а затем путь. И перезапустите Firefox. Если что-то не работает, попробуйте сбросить Firefox, так как если вы что-то установили ранее, это может его застрять.

Этот метод работает хорошо без certutil.

Напротив распространенного мнения, вы можете заставить 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. Примечание: это удалит все существующие сертификаты в хранилище, поэтому, если у вас есть пользовательские сертификаты, которые вы добавили вручную, вам может потребоваться сделать резервную копию этой папки, а затем повторно импортировать их.

Начиная с Firefox 64, Mozilla утверждает, что собственный “корпоративный CA” может быть импортирован из этих системных путей в Linux:

  • /usr/lib/mozilla/certificates
  • /usr/lib64/mozilla/certificates

Эти пути по умолчанию не существуют в Ubuntu, но их можно добавить вручную.

Дополнительно вам необходимо назвать каждый сертификат в файле /usr/lib/firefox/distribution/policies.json, чтобы он был импортирован автоматически:

{
    "policies": {
        "Certificates": {
            "ImportEnterpriseRoots": true,
            "Install": [
                "example.crt",
                "/specific/folder/another-example.crt"
            ]
       }
    }
}

В этом случае файл сертификата с именем “example.crt” в любом из названных каталогов будет добавлен при перезапуске Firefox.

Как показал Батчен Регев в своем ответе, вы также можете указать файл с абсолютным путем. (Таким образом, сервер разработки .NET core на Linux также добавляет сертификат localhost).

Справка:
https://support.mozilla.org/en-US/kb/setting-certificate-authorities-firefox

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

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

certutil -A -n "Описание имени" -t "CT,C,C" -d dbm:/home/<имя пользователя>/.mozilla/firefox/<папка по умолчанию>/ -i certificate.crt

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

certutil -A -n "Описание имени" -t "CT,C,C" -d sql:/home/<имя пользователя>/.mozilla/firefox/<папка по умолчанию>/ -i certificate.crt

из man certutil:

-d [prefix]directory
Укажите каталог базы данных, содержащий файлы сертификатов и ключей.

certutil поддерживает два типа баз данных: устаревшие базы данных безопасности (cert8.db, key3.db и secmod.db) и новые SQL базы данных (cert9.db, key4.db и pkcs11.txt).

NSS распознает следующие префиксы:

·   sql: запрашивает новую базу данных

·   dbm: запрашивает устаревшую базу данных

Если префикс не указан, то тип по умолчанию получается от NSS_DEFAUL

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

CCK Wizard

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

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

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

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

Я использую приложение “Виртуализация пользовательской среды” (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, "https://askubuntu.com/")
  strProfile = strAppData & "\Mozilla\Firefox\Profiles\" & arrLine(1)
  strCertDB = strProfile & "\cert8.db"

  'Проверьте, существует ли база данных, если нет, переходите к следующему элементу
  If objFSO.FileExists(strCertDB) Then
    'Запустите команду certutil на этой базе данных
    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"

    'Запустите команды импорта для этого профиля Firefox
    objShell.Run("%comspec% /c " & strCertCommand1),0,TRUE
    objShell.Run("%comspec% /c " & strCertCommand2),0,TRUE
    objShell.Run("%comspec% /c " & strCertCommand3),0,TRUE

Суть: Создайте файл политики (/etc/firefox/policies/policy.json) со следующим содержимым:

{
  "policies": {
    "Certificates": {
      "Install": ["/path/to/cert.pem", "/path/to/cert2.der"]
    }
  }
}

Firefox 120+ на Windows и MacOS загружает сертификаты из системного хранилища доверия, но, к сожалению, такой механизм не существует в Linux.

На Firefox 64+ мы можем использовать политику, чтобы обойти эту проблему, но она не автоматически импортирует сертификаты из системного хранилища; их нужно указывать вручную. Это включает создание файла policy.json:

На Linux файл помещается в firefox/distribution, где firefox – это каталог установки Firefox, который варьируется в зависимости от дистрибутива, или вы можете указать политику на уровне системы, разместив файл в /etc/firefox/policies/.

Учтите, что если вы используете Firefox ESR, путь может быть /etc/firefox-esr/policies.

Теперь мы можем использовать Certificates | Install политику для указания сертификатов, которые необходимо добавить в Firefox. Шаблон выглядит так:

{
  "policies": {
    "Certificates": {
      "Install": ["cert1.der", "/home/username/cert2.pem"]
    }
  }
}

Если указано только имя файла, Firefox будет искать его в следующих каталогах:

  • /usr/lib/mozilla/certificates/
  • /usr/lib64/mozilla/certificates/
  • ~/.mozilla/certificates/

Абсолютный путь также может использоваться с Firefox 65+.


Справка: https://mozilla.github.io/policy-templates/#certificates–install

Ответы здесь в основном устарели, и добавление записи Certificates->Install в policies.json не сработало для меня. Однако следующее сработало для меня с Firefox 129.0.2 на Ubuntu 24.04.1. Это также часть их самой последней официальной документации по этому вопросу, которая умышленно пропускает раздел Certificates файла json.

  1. Подтвердите, что у вас установлен p11-kit с помощью which p11-kit. Установите его, если он отсутствует, с помощью sudo apt install p11-kit (это не должно быть необходимо, так как он поставляется с Ubuntu 24.04.1).
  2. Запустите p11-kit list, чтобы найти путь к библиотечному модулю p11-kit-trust. На моей машине это /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so.
  3. Создайте файл (и путь, если отсутствует) /etc/firefox/policies/policies.json.
  4. Добавьте следующее в него:
    {
      "policies": {
        "SecurityDevices": {
          "p11-kit-trust": "/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so"
        }
      }
    }
    

    Сохраните и закройте.

  5. Перезапустите Firefox.

Теперь он должен видеть все сертификаты, которые вы добавили в основное хранилище. Для быстрого освежения, как это сделать, смотрите здесь.

Ответ или решение

Как добавить сертификаты центров сертификации (CA) в Firefox на Ubuntu

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

Подходы к решению задачи

  1. Использование certutil для импортирования сертификатов

    Ваша попытка использования certutil является правильной, однако могут возникнуть некоторые сложности. Этот инструмент используется для работы с сертификатами, однако начиная с более поздних версий Firefox, используется обновленная база данных (cert9.db). Убедитесь, что вы обращаетесь к правильной версии базы данных, используя следующие команды:

    # Для работы с базами данных старого формата
    certutil -A -n "Имя сертификата" -t "TC,C,C" -d dbm:/home/<username>/.mozilla/firefox/<default folder>/ -i certificate.crt
    
    # Для работы с базами данных нового формата
    certutil -A -n "Имя сертификата" -t "TC,C,C" -d sql:/home/<username>/.mozilla/firefox/<default folder>/ -i certificate.crt

    Убедитесь, что файл сертификата корректен и доступен по заданному пути.

  2. Использование системного хранилища сертификатов

    К сожалению, на текущий момент Firefox на Linux не поддерживает автоматическую загрузку сертификатов из системного хранилища. Однако, начиная с Firefox 64+, возможно использовать специальные политики для импортирования сертификатов. Чтобы установить их, создайте файл policies.json в директории /etc/firefox/policies/ со следующим содержимым:

    {
     "policies": {
       "Certificates": {
         "Install": ["/path/to/cert1.crt", "/path/to/cert2.crt"]
       }
     }
    }

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

  3. Использование p11-kit для замены библиотеки сертификатов

    Пакет p11-kit может служить альтернативным способом, позволяя Firefox обращаться к системному хранилищу сертификатов. Для этого выполните следующие команды:

    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 обновил свою базу сертификатов, при этом учитывайте, что все существующие сертификаты будут удалены.

  4. Автоматизация для новых пользователей и профилей

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

    Пример простого bash-скрипта:

    #!/bin/bash
    for certDB in $(find ~/.mozilla* -name "cert9.db")
    do
     certutil -A -n "My CA Cert" -t "TC,C,C" -i /path/to/my_ca_cert.crt -d sql:$certDB
    done

Заключение

Добавление системных сертификатов в Firefox на Ubuntu может быть непростой задачей, поскольку браузер управляет сертификатами на уровне профиля. Однако, используя предложенные методы, вы сможете установить необходимые сертификаты и добиться стабильной работы браузера. Оставайтесь в курсе обновлений Firefox и приключений с сертификатами, так как Mozilla постоянно обновляет свою платформу.

Оцените материал
Добавить комментарий

Капча загружается...