はじめに
自己証明書を作成して, 実行ファイルに署名してみました.
自己証明書の作成, 署名ともVisual Studioの開発用コマンドプロンプトを利用します.
自己証明書の作成
コマンドプロンプトより, 自己証明書を作成するフォルダーに移動します.
今回は, Cドライブ直下にtestフォルダーを作成し, ここに作成していきます.
1. .pvk と .cer の作成
makecertコマンドを使用して, .pvk と .cer を作成します.
makecert /a sha256 /n "CN=Sample,O=Sample,C=JP" /r /h 0 /eku "1.3.6.1.5.5.7.3.3" -b 01/01/2023 -e 12/31/2030 /sv Sample.pvk Sample.cer
- オプションの説明
オプション | 説明 |
---|---|
/a | ハッシュアルゴリズム |
/n | 証明書の名前 CN=Common Name O=Organization Name C=Country |
/r | 自己署名ルート証明書の作成 |
/h 0 | 証明書の基本的な制約 |
/eku | 証明書の拡張キー "1.3.6.1.5.5.7.3.3"=コード署名 "1.3.6.1.4.1.311.10.3.13"=ライフタイム署名 ※コード署名, ライフタイム署名とするには, "1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13"とカンマで続けて指定する |
/b | 証明書の有効期間の開始日 (mm/dd/yyyy形式) |
/e | 証明書の有効期間の終了日 (mm/dd/yyyy形式) |
/sv | pvkファイルの名前, cerファイルの名前 |
上記コマンドを実行すると, Create Private Key Passwordダイアログが表示されます.
ここに任意のパスワードを指定します. 今回は 1234 としました.
引き続き, Enter Private Key Passwordダイアログが表示されるので, 上記で指定したパスワードを入力します.
これでtestフォルダーにSample.pvkとSample.cerが作成されます.
2. .pfx の作成
pv2pfxコマンドを使用して, .pfx を作成します.
pvk2pfx /pvk Sample.pvk /pi 1234 /spc Sample.cer /pfx Sample.pfx /po 1234
- オプションの説明
オプション | 説明 |
---|---|
/pvk | pvkファイル指定 |
/pi | pvkファイルのパスワード |
/spc | spcファイル指定 |
/pfx | 出力するpfxファイル名 |
/po | pfxファイルのパスワード |
上記コマンドを実行すると, testフォルダーにSample.pfxが作成されます.
3. 実行ファイルの署名
signtoolコマンドを使用して, 実行ファイルに署名します.
今回は Sample.exe に署名してみます. testフォルダーにSample.exeをコピーしておきます.
signtool sign /fd sha256 /f Sample.pfx /p 1234 /t http://timestamp.digicert.com Sample.exe
- オプションの説明
オプション | 説明 |
---|---|
/fd | ファイル署名に使用するアルゴリズム |
/f | pfxファイル |
/p | pfxファイルのパスワード |
/t | タイムスタンプ ※この指定がないとタイムスタンプが入らない |
(末尾) | 署名するファイル |
上記コマンドを実行すると, 署名ができます.
署名前後のSample.exeのプロパティを比べると, 署名後には[デジタル署名]のタブが追加されています.
4. ルート証明書の登録
デジタル署名の詳細を確認すると, 信頼していないルート証明書のため強制終了したということがわかります.
Sample.cerを信頼されたルート証明書として登録します.
Sample.cerをダブルクリックして, [証明書のインストール]をクリックします.
証明書のインポートウィザードが表示されるので, 指示に従って登録します.
[証明書をすべて次のストアに配置する]を選択し, [参照]をクリックします.
[信頼されたルート証明機関]を選択し, [OK]をクリックします.
あとは[完了]をクリックすると, 「正しくインポートされました。」というメッセージが表示されます.
ルート証明書として登録後, Sample.exeのデジタル署名の詳細を確認すると, デジタル署名の問題がなくなっています.
最後に
Visual Studioの開発用コマンドプロンプトを利用することで, 自己証明書を作成して, 署名することができます.