signtoo.exeの使い方

なければプログラムが動かないというわけではないが、Windows Vistaから、プログラム配布元のコード署名がないと何かと使用者に恐怖を与えるメッセージが表示されるので、良識あるアプリケーションベンダーは基本的に配布するプログラムにはデジタル署名を入れることがほぼ必須となった。
で、その署名方法なんだが、Verisignのサイトを見ても、Microsoftのサイトを見てもいまいちよくわからない。いや、わかるのだが signtool.exe がGUIを用いた方法でしかうまくコードに署名できないのだ。コマンドライン引数の使い方がいまいちよくわからないのだ。ごくたまにしか行わない行為ならそれでもいいのだが、製品アップ時にはちょっとしたバグが直前で見つかったりして、頻繁に作り直したりすることが多々あったり、署名しなければならないプログラムファイルが複数個あるとGUIを使った方法ではとてもやってられない。
verisignで署名を申請すると
hogehoge.pvk と hogehoge.spc といった2つのファイルが得られる(もちろんhogehogeは適当)。
signtool.exeの説明を見て、てっきりこの2つのファイルを使って、

>signtool.exe sign /a /f hogehoge.spc /csp “Microsoft Strong Cryptographic Provider” /k hogehoge.pvk /t http://timestamp.verisign.com/scripts/timstamp.dll foo.exe

のように実行するのだと思い、実行してみるも、
SignTool Error: The specified private key container was not found.
というエラーが帰ってくる。
で、いろいろ調べてやっとコマンドラインで行う方法がわかった。
.spcと.pvkファイルをそのままsigntool.exeで使うのではなく、いったんpvk2pfx.exe というプログラムを使ってpfxファイルに変換して、signtool.exeで使うらしい。
で、その方法は

>pvk2pfx.exe -pvk hogehoge.pvk -spc hogehoge.spc -pfx hogehoge.pfx -pi password
でhogehoge.pfxを作り、
>signtool sign /f hogehoge.pfx /a /t http://timestamp.verisign.com/scripts/timstamp.dll /p password foo.exe

という風に実行することで、無事にコマンドラインから署名ができる。署名対象の指定には、ワイルドカードも指定できるので、複数のDLLやEXEファイルも一気に署名できる。
めでたしめでたし。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする