*[PC]実行ファイルにデジタル署名を付与

自分でデジタル署名を付与するためのメモ

ググるとドライバ関連の話がいろいろと出てくる
参考にしたのは
@tenshouki_jpさんのドライバをデジタル署名する方法
天翔記.jp

要はローカルPCに自分で証明書を作成し自分の証明書を使って署名する
必要なコマンドはmakecat.exe、certmgr.exe、signtool.exe
Windows10 SDKだけでよくVisual Studio Communityは不要だった

公式からWindows10 SDK インストーラー winsdksetup.exeをダウンロード
https://developer.microsoft.com/ja-jp/windows/downloads/windows-10-sdk
f:id:nakapon:20190613123435p:plain

必要(インストール)なのは二つ
Windows SDK Signing Tools for Desktop Apps
Windows SDK for UWP Managed Apps
f:id:nakapon:20190613123439p:plain

ツールはここにインストールされる(Windows10 1903の場合)

x64 "C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64"
x86 "C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86"

※Windows10の各バージョン用に10.0.14393.0、10.0.15063.0、
10.0.16299.0、10.0.18362.0がインストールされる

証明書はカレントフォルダに.cerファイルが作成される
どこに作成するか悩んだが、ツールのフォルダにそのまま作成した
また証明書名はユーザー名とし、例に従い%username%で指定している

cd /d "C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64"
makecert.exe /r /pe /ss my /n "CN=%username%" %username%.cer
certmgr.exe /add %username%.cer /s /r localMachine root
certmgr.exe /add %username%.cer /s /r localMachine trustedpublisher

f:id:nakapon:20190613123442p:plain
f:id:nakapon:20190613123448p:plain

証明書は一度作成すれば良い
デジタル署名はsigntool.exeで行う

cd /d "C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64"
signtool.exe sign /a /v /s my /n %username% "署名したいファイル"

f:id:nakapon:20190613123451p:plain

/tでタイムスタンプも付与できるが、URLに何を指定するのが最適か
まだ調べていないので現在は未指定

ググったところ以下の2カ所を使っている例があった

http://timestamp.digicert.com
http://timestamp.verisign.com/scripts/timstamp.dll