宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
m.tamaki氏によるエントリとFirefox Hacksを見ながら自分でも試してみた。オブジェクト署名証明書が無いので、とりあえずオレオレ証明書での実験だけど。
Windows XPで作業する場合の話をします。
必要なファイルは、NSS(Netscape Security Services)の中に含まれている署名用ツールと、それを動かすために必要なランタイム(Netscape Portable Runtime)。
nss-*.zipを展開するとbin, include, libの3つのフォルダが出てくる。このうち使うのはbinの中にあるツール群とlibの中にあるライブラリ。libの中にあるファイルをすべてbinに移動してしまおう。
nspr-*.zipを展開すると、同様にbin, include, libの3つが出てくるけど、こっちはbinとincludeは使わない。libの中にあるDLLファイルをNSSの方のbinに移動して、残りは全部削除。
インストールはこれでおしまい。NSSのbinをProgram Filesあたりに置いておこう。
以下、コマンドラインからの操作になるので、NSSのbinにパスを通しておくとよい。Windows XPの場合、マイコンピュータを右クリックして「プロパティ」でシステムのプロパティを開き、「詳細設定」の「環境変数」ボタンを押す。「システム環境変数」の中の「Path」を選択して「編集」ボタンを押し、末尾に「;C:\Program Files\nss\bin\」と書き加える(パスは自分がNSSを置いた場所に読み替えて下さい)。
適当なディレクトリで以下のコマンドを実行。
ここで何も表示されずにユーティリティが終了してしまった場合、NSSのlibかNSPRのlibの中身が認識されていない。NSSのbin、NSSのlib、NSPRのlibの中身が全部一ヶ所(NSSのbinフォルダ)にまとまっているかどうかチェックすること。
正常にユーティリティが動き出すと、パスワードの入力を求められる。何か適当なパスワードを入力(確認のための再入力有り)すると、certutilが終了して、certsディレクトリの中にcert8.db, key3.db, secmod.dbの3つのファイルが生成される。
そのまま続けて、以下のコマンドを入力する。
signtool -G "証明書の名前" -p "さっき入力したパスワード" -d .
証明書の名前は好きなように入力して構わない(例:「Clear Code Inc.」)。実行すると何やら警告のメッセージが表示されるので、「y」を入力してEnterすると、証明書の情報の入力を求められる。一応、以下にそれぞれの意味を書いておくけど、organization以外は空欄のまま進めても全然構わない(どうせ公開するものではないので)。
すべて入力すると、何やらメッセージが出て、オレオレ証明書が生成される。cert8.dbとかがあるディレクトリに生成されるx509.cacertとx509.rawがそれなのかな?
では、このオレオレ証明書でもって署名してみよう。まず署名付きのjarファイルの作り方。
こんなフォルダ構成を想定して解説する。コマンドプロンプトで、myextensionがカレントディレクトリだとしよう。
これで、content, locale, skinを含んだ署名済みのjarファイルができる。次に、これを含んだXPIパッケージを作る。
signtoolのオプションで -X を加えるのを忘れないこと。これはXPIを生成する時用の指定。これがないと、署名付きで作ったはずのパッケージでも、署名無しと判定されてしまう。
これでできあがったXPIパッケージをFirefoxのウィンドウにドラッグ&ドロップしてみる。「ソフトウェアインストール」ダイアログにおいて、普段だと「署名されていません」と赤文字で表示される所に、さっき入力した証明書の名前さっきorganizationの欄に入力した組織名が斜体で表示されていれば、このパッケージはちゃんと署名されている。
注意。本来だったら、Firefox内の証明書のデータベースにこのオレオレ証明書は登録されていないので、この時点で何らかの警告が出ないといけない(はず)。もし仮にこの問題が修正されたとしたら、オレオレ証明書で署名された拡張機能がちゃんと署名されているかどうかを確認するには、ユーザープロファイル内のcert8.db, key3.db, secmod.dbを、先ほど生成した物と入れ換えてやる必要がある。
m.tamaki氏のエントリを参照してください。
「ソフトウェアインストール」ダイアログで証明書の名前は見れるんだけど、それ以上の情報を確認できない……証明書の名前をクリックしても無反応だし。これじゃあ、どうやってオレオレ証明書とそうじゃない証明書を区別すればいいんだ?
jarやxpiを作成するときsigntoolに与えるオプションは(-Gではなく)-kではありませんか?
また、「ソフトウェアインストール」ダイアログに表示されるのは-Gで指定した名前ではなく、organizationに入力した名前であるようです。organizationが空だと、署名されているにもかかわらず「署名されていません」と赤文字で表示されます(Bug 372980)。
ご指摘ありがとうございます。コピペで記事を書いたので、しょうもないミスをしてしまいました……
署名が表示される件は再現しましたが、その先、実際に「インストール」ボタンを押してみると、「署名が検証されていません」というメッセージが出てインストールできませんでした。
Piro さんの環境ではインストールできましたか?
の末尾に2020年11月30日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2007-04-09_cert.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。
writeback message: Ready to post a comment.