logo
  • Home
  • ソフトウェア
    • アタッシェケースアイコン
      アタッシェケース

      ファイル暗号化ツール(Windows)

    • MarkDown#Editorアイコン
      MarkDown#Editor

      Markdownデュアルエディタ(Windows)

    • OutlineTextアイコン
      OutLineText

      Markdownによるアウトライナー(macOS)

    • OutlineTextアイコン
      BossComing

      一瞬で偽デスクトップに差し替え(Windows)

  • 開発ツール
    • Png2WinIco

      PNGからWindowsICOファイル生成(Windows)

    • SHCode-JP-Zen-Haku

      プログラミング用等幅フォント(Windows, macOS)

    • 秀丸エディタ・日付挿入マクロ

      柔軟な日付挿入可能な「秀丸エディタ」専用マクロ

    • 秀丸エディタ・Markdown強調表示定義ファイル

      「秀丸エディタ」専用の強調表示定義ファイル

  • このサイトについて
  • ブログ
  1. Home
  2. Blog
2019年07月02日 17:33 更新

Inno Setupでsigntool.exeを使ってコードサイニング証明をつける

hibara

2019年7月2日 17:33 Inno Setup アタッシェケース
  • Inno Setup
  • signtool
  • コードサイニング証明

Inno Setupとはフリーのカスタマイズ可能なインストーラー作成ツール

拙作のアタッシェケースでは、インストーラーとしてInno Setupを使用しています。フリーでありながら、さまざまなオプションによるカスタマイズが可能で、究極はPascalでスクリプトを書いて走らせることもできます。

その中で、できあがったインストーラーにコードサイニング証明書を付けるのは、バッチファイルなどで処理していますが、Inno Setup で作成したインストーラー内に含まれる「アンインストーラー」にも証明書を付けてやらねばなりません。


昔の Inno Setup では、インストーラーとして固められたバイナリから、無理くり抜き出してコードサイニング証明書を付加していたようですが、現在のバージョンではそのオプションがあり、容易に証明書を付けることができます。

バッチファイルからの signtool.exe は無理筋っぽくて、Inno Setup の IDE から登録するのが無難

ただし、Inno Setup で作成したインストーラー内の「アンインストーラー」に証明書を付けるには、Innno Setupの設定ファイル(*.iss)をバッチファイルから Inno Setup コンパイラ(ISCC.exe)に喰わせることで、証明書を付加することはできないようです。

そこも一箇所にまとめて自動化するには、Node.js のモジュールを入れれば、近いことができそうです。

node-innosetup-compiler
https://github.com/felicienfrancois/node-innosetup-compiler

おとなしくバッチファイルで処理する場合には、signtool.exe の引数込みのコマンドを Inno Setup の IDE 上から登録することで、処理することができるようになります。

IDE から signtool.exe の処理を追加する

登録するには、Inno Setup の IDE メニュー「Tools」→「Configure sign tools…」を選択します。

すると、Sign Tool を選択するためのウィンドウが出てきますので、「Add」を押して、Signtool.exe を登録していきましょう。

まず、登録する signtool.exe の内容を示す「変数名」を入力します。ここは、設定ファイル(*.iss)で必要になってきますが、分かりやすい適当な名前で良いでしょう。ここでは、仮に「MySignTool」という名前にしました。

名前を入力すると、続いてその内容を入力するウィンドウが表示されます。前のウィンドウと似てますので少し注意が必要です。

そこに、

$qC:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\signtool.exe$q sign /v /a /n $qMitsuhiro Hibara$q /t http://timestamp.comodoca.com/authenticode $f


といった感じに、signtool.exe のコマンドライン実行形式を丸ごと入力してOKボタンを押します。ここに書き込まれる、signtool.exe の書式などの扱いについては後述します。

リストに、MySignTool=$qC:\Program Files\Microsoft....と表示されていると思います。

ここで、「OK」ボタンを押せば、signtool.exe のコマンドライン実行形式は、先ほど名前を付けた「MySignTool」変数に入り、Inno Setup の設定ファイル(*.iss)で使うことができます。

次に、設定ファイル(*.iss)にある、「Setup」セクションに、以下の二つを追加します。

issSignedUninstaller=yes
SignTool=MySignTool

これで設定は完了です。

ちなみに、上で例として使われている Inno Setup の設定ファイルは、GitHubで見ることができます。

https://github.com/hibara/AttacheCase3/blob/master/installer/AttacheCase.iss

Inno Setup で使う signtool.exe コマンドオプションの書式

さて、Inno Setup の変数として登録した signtool.exe ですが、コマンドオプションなどの書式詳細は以下を参考にすると良いでしょう。

SignTool.exe (署名ツール) – Microsoft
https://docs.microsoft.com/ja-jp/dotnet/framework/tools/signtool-exe

あと、書式内で$qや、$fといった記号が用いられていますが、こちらは、Innno Setup のパラメーターオプションです。

ちなみに、ここで使われている、$q は、クォートを示し、$f は、Innno Setup が与えるファイルパスなどが入ります。

$qC:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\signtool.exe$q sign /v /a /n $qMitsuhiro Hibara$q /t http://timestamp.comodoca.com/authenticode $f

前述した signtool.exe のコマンドライン書式を振り返って観ましょう。コマンドオプション詳細については、以下のページにあります。

SignTool.exe (署名ツール) – Microsoft
https://docs.microsoft.com/ja-jp/dotnet/framework/tools/signtool-exe

ですが、ここで使われているオプションについては、補足しておきます。

  • /v コマンドライン処理いた歳に、コマンドが正常に実行したか、失敗したかにかかわらず、詳細出力と警告メッセージが表示されます。
  • /n コードサイニング証明書をつける人の名前(法人なら組織名を指定します。
    /n "Mitsuhiro Hibara"
  • /t タイム スタンプ サーバーの URL を指定します。これは、コードサイニング証明書を取得した場所によって指定がちがうため、入手先のヘルプページか何かを参考にされると良いでしょう。
  • /a 最適な署名証明書を自動的に選択します。もっとも有効期間が長い証明書が自動で選択されます。個人でアプリケーションを配布されている方などは、複数コードサイニング証明書を持っているとは思えませんし、一つで管理しているのなら開発環境のあるPC内にインストールして、このオプションを使うのが、もっとも簡単かと思います。

もしも複数のコードサイニング証明書を運用したいとき

もしも複数の証明書を運用したい場合は、Inno Setup の「Configure Sign Tools…」メニューから、複数の signtool.exe の書式を「変数」として登録できるので、ここで切り替えても良いでしょう。

なお、以下のように、直接、コードサイニング証明書ファイル(*.pfx)を指定してコードサイニングすることも可能です。

signtool.exe sign /f $qM:\cert\SectigoLimited.pfx$q /p $qpasswordpassword$q /n $qMitsuhiro Hibara$q /t http://timestamp.comodoca.com/authenticode $f

/f オプションで、pfxファイルへのパスを指定して、/pオプションで、その pfxファイルを作成した際に入力いたパスワード文字列を指定しても、アンインストーラーに署名をすることが可能になります。

Windows7 以降に対応する

拙作のアタッシェケースは、まだ XP, Vista などに対応しているため、タイムスタンプサーバーで使用されるダイジェストアルゴリズムは、セキュリティ的に脆弱性が指摘されている、SHA-1を使っておりますが、もし Wndiow7 以降のアプリケーションにコードサイニング証明書を付けるのなら、SHA-2(SHA-256)を使用する方が無難でしょう。

signtool.exe sign /a /fd SHA256 /v /tr http://timestamp.comodoca.com /td sha256 $f

以上です。



コメントする     返信コメントをキャンセル(閉じる)

メールアドレスが公開されることはありません。

これらの HTML タグと属性を使用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*
*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

HiBARA blog

日々の開発作業で気づいたこと共有を。同じところで躓いている人が、 検索で辿り着けたら良いな、というスタンスで記事を書くので不定期更新になります。

Post Categories

  • BizSpark (1)
  • C# (10)
  • C++ (2)
  • C++Builder (2)
  • C++Builder XE4 (1)
  • CoffeeScript (3)
  • DynamoDB (2)
  • Electron (1)
  • Inno Setup (3)
  • iPhone (1)
  • JavaScript (11)
  • jQuery (3)
  • Mac OSX (2)
  • Markdown (2)
  • MarkDown#Editor (5)
  • PHP (7)
  • Qt (5)
  • SHA-3 (2)
  • Smarty (2)
  • アタッシェケース (23)
  • など (2)
  • フォント (1)
  • プログラミング (33)
  • 未分類 (1)

Tags

  • DLL
  • exe
  • Inno Setup
  • NuGet
  • signtool
  • コードサイニング証明
  • サテライトアセンブリ
  • マージ
  • 光コラボレーション
  • 株式会社CL

© 2011-2023 M.Hibara

Facebook icon
Twitter icon
GitHub icon
Qiita icon