★ The Tsuchinoko News 2 (つちのこ通信2) ★

重要な話から、どうでもいいことまで。ほとんど役に立たないことを書き連ねています。

【PC】コードサイニング証明書で署名

先日、デジタル証明書でおなじみのVeriSign社から「コードサイニング証明書」を1年間無料でどうぞ、というキャンペーンの告知が届き、法人で初めての取得で他のベリサインサービスを使ってないソフトウェア開発会社で、と、やたら制限のある「資格」に合致しているようなので、ありがたく1年間無料で証明書を取得した。
本当は「ClickOnce」で利用する予定だったのだが、「ClickOnce」が筆者のしたいことが出来ないようなのであきらめて普通の「セットアップ」で使うことにした。
f:id:tsuchinoko118:20110915182554j:image:left:w360このコードサイニング証明書によるデジタル署名をしないと、のような、さも悪意があって危険そうなダウンロードファイル扱いになって好ましくないからだ(笑)

そこで Visual Studio 2010 で「セットアップ」(.msi)に署名をする”機能”を探してみたが見あたらず。「ClickOnce」ではGUIのボタンがあるようなダイアログで親切丁寧に、ここに入れてね、ここで指定してねと書いてあるのだが「セットアップ」(.msi)の方では、どこにもそのような”機能”がない。
面食らって、ノウハウをネットで探してみたが、Visual Studio 2005 あたりまでなら見つかるが、2010 となると見つからない。試しに 2005 のハウツーでやってみると、コマンドの仕様なども変わってしまっているようでうまく動作しないことがわかった。つまり、やり方が全くわからないというわけだ(笑)

あきらめて何を書いてあるのかよくわからないマイクロソフトのドキュメントを頼みの綱に、Visual Studio 2010 の IDE(統合開発環境)でデジタル署名をする方法を模索、ようやくうまくいった。

まず最初にやらないといいけないのは、VeriSign社から購入(?)取得した「証明書」から「.pfxファイル」の作成。
「インターネットオプション」から、ファイルとして取り出せるので、まず、これを行う。

f:id:tsuchinoko118:20110915182248j:image:w560
エクスポートボタンを押す。

f:id:tsuchinoko118:20110915182249j:image:w560
ウィザードが開始される。

f:id:tsuchinoko118:20110915182250j:image:w560
秘密キーをエクスポートしますにクリックをして次へ。

f:id:tsuchinoko118:20110915182251j:image:w560
Pfx を指定して次へ。

f:id:tsuchinoko118:20110915182252j:image:w560
パスワードを入力して次へ。

f:id:tsuchinoko118:20110915182253j:image:w560
保存場所とファイル名をフルパスで指定して次へ。

f:id:tsuchinoko118:20110915182254j:image:w560
完了。


f:id:tsuchinoko118:20110915182255j:image:w180目的のデジタル署名のファイル「njc.pfx」のできあがり。


次に「セットアップ」(.msi)に署名するには signtool.exe というコマンドが必要だ。signtool.exeは、.NET Freamework SDK の深い階層にある。
f:id:tsuchinoko118:20110915182256j:image:w560

このままだと後から呼び出したりするときに長いパスを書かねばならず面倒なので面倒なので、「C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin」にある Signtool.exe と先ほど取り出した njc.pfx を わかりやすい任意のフォルダを作ってコピー保存する。

f:id:tsuchinoko118:20110915182257j:image:w560
筆者は C:\VS2010PROJ というフォルダに、ソース(ソリューション)などをまとめているので、そこに PFX というフォルダを作成して「C:\VS2010PROJ\PFX」に放り込んだ。


f:id:tsuchinoko118:20110915182258j:image:right:w300
VS2010のIDE(統合開発環境)での、「セットアップ」=配置プロジェクトには、ビルド後、自動的に何かするのならここに書き込めという覧があるので、「RunPostBuidEvent」を「ビルドが成功したとき」にして、「PostBuildEvent」に、Signtool.exe で 目的のファイルにデジタル署名を行うマクロを記述する。



f:id:tsuchinoko118:20110915182259j:image:w560
マクロは、

"C:\VS2010PROJ\PFX\signtool" sign /f "C:\VS2010PROJ\PFX\njc.pfx" /p "ぱすわーど" /d "NJC JD-NET CONVERTER セットアップ" /du "http://g-cm3.com" "$(BuiltOuputPath)"
;
"C:\VS2010PROJ\PFX\signtool" sign /f "C:\VS2010PROJ\PFX\njc.pfx" /p "ぱすわーど" "setup.exe"

という内容で正しく動作する。


C:\VS2010PROJ\PFX\signtool は、さきほど「C:\VS2010PROJ\PFX」にSigntool.exe を放り込んだのでそれを呼び出し。
sign は デジタル署名しますよ。の意味。
/f "C:\VS2010PROJ\PFX\njc.pfx" は、さきほど「C:\VS2010PROJ\PFX」に njc.pfx を放り込んだので、これで署名。
/p "ぱすわーど"は、パスワード。
/d "NJC JD-NET CONVERTER セットアップ" は、.msi が起動したときに表示されるプログラム名。これを指定しないと、わけのわからない16進数の名前になってしまうのだった。
/du "http://g-cm3.com" は、サポートURLのようで一応指定してみたが、いまいち、どこに反映されているのかはわからなかった。
$(BuiltOuputPath) は作成される .msi のファイル名が自動挿入される。

; は もう1個つづきのマクロやりますよ〜の区切り。

もう1個のマクロは setup.exe そのものにも署名してみたのだが意味があるのかどうかは、あまり、よくわからない。


f:id:tsuchinoko118:20110915182551j:image:right:w400とにもかくにも筆者の環境ではこれで、リビルドすれば、自動的にデジタル署名までしてくれるようになった。そして、めでたくちゃんとした会社がつくったソフトウェアのように見えるようになったわけだった。(ちゃんとした会社ですよ(笑))


面倒な作業ではあったが方法論がよくわかって勉強になった。IDEのマクロではなく手動で同じことをすると Visual Studio Ver6.0 の setup.exe や .cab も署名できるようだ。「ClickOnce」には断念したが今後はセットアップ+デジタル署名を活用していくことにしよう。