Я хочу добавить несколько корневых ЦС, которые не поставляются с 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/
) для изменить профиль пользователя при запуске сеанса, но мне нужно решение, которое работает. Сейчас я даже не могу загрузить сертификаты в профили пользователей из командной строки!
Проблема здесь в том, что у 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
Вопреки распространенному мнению, вы можете заставить 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 мастера CCK является импорт сертификатов CA. Я использую это дополнение для создания пользовательского дополнения, в которое входит компания CA Cert. Затем я упаковываю пользовательский xpi в .deb во внутреннем репозитории, с которого все рабочие станции получают обновления.
РЕДАКТИРОВАТЬ: Чтобы упаковать xpi для Ubuntu, вам нужно создать пакет, который включает каталог / usr / lib / firefox-addons / extensions / [ addon-name @ servername] и разархивируйте все содержимое xpi в этот каталог. Например, если вы называете свой аддон foobarbaz и сервер, с которого он настроен для обновления (если вы должны были включить эту функцию), является intranet.example.com, то каталог будет foobarbaz@intranet.example.com. Я никогда не включаю автоматическое обновление, а вместо этого обновляю deb в репо.
Я использую приложение «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
Firefox работает после чистой установки. Если база данных сертификатов в cert8.db
удалена, она восстанавливается при следующем запуске Firefox. Это настоятельно говорит о том, что существует общесистемное хранилище сертификатов CA по умолчанию.
Исходный код Firefox показывает , что встроенные сертификаты CA фактически жестко запрограммированы в исполняемый файл firefox
. Они находятся в security / nss / lib / ckfw / builtins / certdata.txt
, поэтому нет способа установить сертификат для всей системы. Помните, что исправление исходного кода может вызвать проблемы с правами интеллектуальной собственности.
Я обнаружил, что большую часть времени и по умолчанию, если не настроен иначе, Firefox использует устаревшие базы данных безопасности (cert8.db, key3.db и secmod.db), что означает, что вам нужно будет использовать другую командную строку для ввода сертификат в правильную базу данных, которую использует Firefox. (см. больше от man of 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
Нашел это решение для добавления сертификатов в firefox на ubuntu:
https://github.com/mozilla/policy-templates/#proxy
Просто нужно добавить этот файл в :
/usr/lib/firefox/distribution/
touch policies.json
В policy.json добавьте:
{
"policies": {
"Certificates": {
"ImportEnterpriseRoots": true,
"Install": [
"somecert1.crt",
"usr/local/share/ca-certificates/somecert1.crt"
]
}
}
}
Часть установки - это сначала имя сертификата, а затем путь. И перезапустите firefox. Если что-то не работает, попробуйте сбросить firefox, как если бы вы что-то установили, прежде чем он может это застрять.
Этот метод хорошо работает без certutil.