ドライバにオレオレ署名を埋め込む

x64 Windowsではデジタル署名されていないドライバはロードすることができないので、自分でビルドしたりその辺から拾ってきたドライバを読ませるときは適当な(オレオレの)署名をする必要がある。
んだけど、よくコマンドを忘れるのでドライバに署名を埋め込む手順をメモ。


ドライバのビルドプロンプトを起動して、

>makecert -r -pe -ss PrivateCertStore -n CN=<発行者名> test.cer
Succeeded

>certmgr /add test.cer /s /r localMachine PrivateCertStore
CertMgr Succeeded

>Signtool sign /v /s PrivateCertStore /n <発行者名> <ドライバファイル名>
The following certificate was selected:
    Issued to: <発行者名>
    Issued by: Root Agency
    Expires:   2040/01/01 8:59:59
    SHA1 hash: 0633C22EA433BE25990CC519CE90E735DC11F8F1

Done Adding Additional Store

Attempting to sign: <ドライバファイル名>
Successfully signed and timestamped: <ドライバファイル名>

Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0


でおk。一度certmgrで証明書ストアに登録してしまえば、以降はSigntoolで署名を埋め込む手順だけでいい。こんなバッチを書いておくと楽でしょう。

Signtool sign /v /s PrivateCertStore /n <発行者名> %1
pause


ちなみにこの証明書は >bcdedit /set testsigning on した環境でなければ使えない。

12/24追記

VeriSignのタイムスタンプは購入者用のサービスとのことなので、タイムスタンプを設定する記述を削除しました。(私が扱う範囲内では)タイムスタンプがなくても問題なくロードできました。

コメントしてくれた名無しさん、ありがとうございます。知りませんでした。そしてVeriSignごめんなさい。