🔏

ハードウェアトークンによるEVコードサイニングをCLIで行う

2022/02/26に公開

Windows向けのバイナリを配布する際に、あるとうれしいEVコードサイニング。
聞きなれない人もいるかもしれませんが、ファイルのプロパティのデジタル署名タブに表示される「アレ」です。
電子署名タグに表示される「アレ」

この署名がなされた実行ファイルは、ユーザーがダウンロードして実行してもSmartScreenによるブロックを受けません。信用できる発行元からリリースされ改ざんなどもされていないため、十分に安全であるということですね。

EVコードサイニングのサービスは、日本だとGMOなどから提供されています。
https://jp.globalsign.com/service/codesign/ev_authenticode.html

私の会社でもGMOから購入して利用しています。
もろもろの手続きを進めて購入すると、秘密キーが格納されたUSBドングル(ハードウェアトークン)が送られてきます。このUSBドングルを接続して署名を行うのですが、その手順は以下のようになっています。

  1. 署名するDLLやEXEを用意
  2. ドングルを差す
  3. ドングルにログイン
  4. SignToolで署名

ただの定型処理な上に署名するファイルの数もそこそこ多いので、当然自動化したくなります。
ここで問題になるのが「ドングルにログイン」するという作業。ダイアログが表示されそこにパスワードを入力しログインするというGUIでのやり取りのですが、これが自動化するうえでの鬼門です。

なんとかこのログインを自動化できないものかと調べてみたところ、StackOverflowにズバリな回答が。
https://stackoverflow.com/a/54439759

あまり知られていないけども、実はSignToolに/kオプションでパスワードを渡して署名できるのだそうです。

signtool sign /f mycert.cer /csp "eToken Base Cryptographic Provider" /k "[{{TokenPasswordHere}}]=KeyContainerNameHere" myfile.exe

上記のリンク先に画像付きの手順が丁寧に書かれているので、詳細はそちらに譲りますが、署名証明書(cerファイル)をエクスポートし、コンテナ名やパスワードを指定すればOKなようです。上のコマンドの通り、[]{}の括弧も正確にそのまま入力してください。

以上でEVコードサイニングが自動化できます。

Discussion