ThawteのMulti-Purpose Certificateを利用すると、1つの証明書でexe、Netscape(Firefox等も含む)、Office VBA、Java、Apple(MacOS?)等のアプリに署名ができるらしい。ただ、このリンク先からたどれる各ドキュメントの情報が微妙に古くてもったいない。ということで、いろいろなサイトの情報を参考に何とかexeファイルとFirefoxの拡張機能への署名に成功したので、メモ。これで$199(更新は159)/年は零細企業にはありがたい。$399(319)/2年という価格設定はかなり謎ですが。
Internet ExplorerでThawteにアクセスして"Microsoft Authenticode (Multi-Purpose) Certificate"を購入、mykey.pvkとmycert.spcを準備する。mykey.pvkは申請時に"certificate private key generation"で指定したファイルで、申請に利用したコンピュータ上に作成される。mycert.spcはThawteの購入後のSTATUSページで"Microsoft Authenticode Format"形式でダウンロードしたファイル。mykey.pvkを作る際に入力するパスワードは、今後の署名の際に必要となる重要なものなので、厳重に管理する。
今回、exeファイルへの署名やFirefoxへのインポートなどはPKCS#12形式のファイルで行うので、まずは準備したmycert.spcをPKCS#12形式に変換する。
マイクロソフトから、pvkimprt.exeをダウンロードしてインストール。
コマンドプロンプトを開き、pvkimprtを実行
pvkimprt -PFX mycert.spc mykey.pvk
証明書のエクスポートウィザードが起動する。
以下では、cs.pfxという名前でPFXファイルを作成したと仮定する。
マイクロソフトから、Platform SDKとCAPICOM SDKをダウンロードしてインストール。
C:\Program Files\Microsoft CAPICOM 2.1.0.2 SDK\Lib\X86\capicom.dllをC:\Program Files\Microsoft Platform SDK\Binにコピーする。
cs.pfx生成時のパスワード<Password>を使って、exeファイル<File>に署名する。
signtool sign /f cs.pfx /p <Password> <File>
署名したexeファイル<File>に、Verisignのタイムスタンプサーバを利用してタイムスタンプを付加する。タイムスタンプを付加すると、証明書自体の有効期限が切れても、インストール時の警告が出なくなる。らしい。
signtool timestamp /t http://timestamp.verisign.com/scripts/timstamp.dll <File>
タイムスタンプを付加したファイルのプロパティを見ると、副署名欄に"VeriSign Time Stamping Services Signer"による署名が追加されている。署名された時点で有効であった証明書で署名したことを証明するために署名する??
拡張機能の開発は終わって、ソースがあるものとする。
Firefoxを起動して、以下の手順でPKCS#12形式ファイルをインポートする。
インポート後のC:\Documents and Settings\<ユーザ名>\Application Data\Mozilla\Firefox\Profiles\<ランダム文字列>.default フォルダの下にあるkey3.db, cert8.db, secmod.db の3ファイルが署名に必要なファイルとなるので、これを<db_dir>にコピー。
ftp.mozilla.orgからNSS,NSPRをダウンロードして展開。今回利用したバージョンは、nss-3.11.4とnspr-4.6.4。
コマンドプロンプトを起動してパスを通す。MSの署名ツールと同名なので、パスの順番に注意する。
SET PATH=<展開先>\nss-3.11.4\bin;<展開先>\nss-3.11.4\lib;<展開先>\nspr-4.6.4\lib;C:\Program Files\Mozilla Firefox;%PATH%
証明書の名前を確認する。
certutil -L -d <db_dir>
次のような出力が得られる。エクスポート時に指定したのでThawteのCAの証明書も含まれているが、末尾が「u,u,u」となっている行の頭が署名に使う証明書の名前となる。
test CodeSigning u,u,u
Thawte Code Signing CA - Thawte Consulting cc c,,c
確認した証明書の名前を使って署名する。こちらのsigntoolは、パッケージングと署名を同時にやるらしいので、xpi化したファイルではなく、パッケージ化したい拡張機能のソースの基点ディレクトリを指定する。
signtool -d <db_dir> -k "test CodeSigning" -p <パスワード> -X -Z <生成するXPIファイル名> <ソースツリーの基点ディレクトリ>