Ubuntuのデフォルトのfirefoxに付属していないルートCAをいくつか追加したいのですが、方法がわかりません。
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/
のスクリプト、または/etc/xdg/autostart/
のxdg自動起動システムによって呼び出されるスクリプト)に依存してユーザープロファイルを変更できます。セッションの開始時に、私は動作するソリューションが必要です。コマンドラインからユーザープロファイルに証明書を読み込むことさえできません。
ここでの問題は、Firefoxが証明書を探す「中央」の場所を持たないことです。現在のプロファイルを調べます。 Firefoxで/usr/share/ca-certificates
または他の同様のディレクトリを変更できないのはそのためです。これは何年も要求されてきたものです。問題を参照してください 62037 、 449498 および 454036 (そしておそらく他にもたくさんあります)。
そのため、2種類のソリューションだけが残っています。各プロファイルを変更するか、Firefoxの動作を変更します。私はこれがあなたが探しているものではないことを知っていますが、Firefoxはユーザーのプロファイルのみを見るため、方法はありません。
そうは言っても、私が選択する解決策は、ハードリンクまたはシンボリックリンクを使用することです。具体的には、ハードリンクを使用します。私が判断するのに十分な情報を持っていませんが、この解決策は確かに最も簡単で、おそらくより良いでしょう。
基本的には、各プロファイルの各cert8.db
およびkey3.db
ファイルを削除し、「最も完全な」cert8.db
およびkey3.db
へのリンクに置き換えます。ハードリンクを使用する場合、元のcert8.db
とkey3.db
は新しいものと区別できません。
ニーズに合わせてパーミッションを調整することを忘れないでください。ほとんどの場合、誰もが証明書を追加/削除できるように、chmod a+rw
が必要になります。特定のユーザーのみが証明書を追加/削除できるようにしたい場合は、グループを作成し、2つのデータベースをそのグループに割り当て、そのグループだけに+w
権限を付与できます。
最も簡単な方法は、サンプルのfirefox-profileに証明書をインポートし、証明書を装備したいユーザーにcert8.dbをコピーすることです。
最初に証明書を手作業でサンプルユーザーのfirefoxプロファイルにインポートします。次にコピーする
/home/${USER}/.mozilla/firefox/${randomalphanum}.default/cert8.db
ユーザーのfirefox-profilesに。それでおしまい。確認したい場合は、新しいユーザーが証明書を自動的に取得するように、cert8.db
を次の場所にコピーします。
/etc/firefox-3.0/profile
既存の証明書を上書きしない代替方法を次に示します。[Linuxシステムのbashフラグメント]
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
Libnss3-toolsパッケージ(debian/ubuntu)に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はクリーンインストール後に動作します。 cert8.db
の証明書データベースが削除されると、次回のFirefoxの起動時に再生成されます。これは、CA証明書のシステム全体のデフォルトストレージがあることを強く示唆しています。
Firefoxのソースコード shows 組み込みのCA証明書は、実際にはfirefox
実行可能ファイルにハードコードされています。それらは security/nss/lib/ckfw/builtins/certdata.txt にあります
そのため、システム全体に証明書をインストールする方法はありません。ソースコードにパッチを当てると、知的財産権に関する問題が発生する可能性があることに注意してください。
CCK Wizard Firefoxアドオンの機能の1つは、CA証明書のインポートです。このアドオンを使用して、会社のCA証明書を含むカスタムアドオンを作成します。次に、すべてのワークステーションが更新を取得する内部リポジトリの.debにカスタムxpiをパッケージ化します。
編集:Ubuntu用のxpiをパッケージ化するには、ディレクトリ/ usr/lib/firefox-addons/extensions/[addon-name @ servername]を含むパッケージを作成し、xpiの内容全体をこのディレクトリに解凍する必要があります。 。たとえば、アドオンにfoobarbazという名前を付け、更新するように設定したサーバー(この機能を有効にする場合)がintranet.example.comの場合、ディレクトリは[email protected]になります。自動更新を有効にすることはありませんが、代わりにリポジトリのdebを更新します。
ほとんどの場合、デフォルトでは設定されていない場合、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
私はユーザーのためにこれを行う「ユーザー環境仮想化」(UEV)アプリケーションを使用していますが、Windowsクライアントでも同じようにログオンスクリプトを使用してこれを行うことができます。 %APPDATA%\ Mozilla\Firefox \%PROFILE%パスを動的に見つけるためにすべてのコードを投稿するわけではありませんが、見つけたら、いくつかの基本的なコマンドを使用してスクリプトをインポートできます。基本的に、Firefoxのprofiles.iniファイルを読んで、Firefoxのprofile/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