exe ファイルに自己署名証明書を発行して、コードサイニングを行う手順 をわかりやすくまとめます。
この内容は、Windows 環境で OpenSSL と signtool.exe が使用可能な前提で進めていきます。
はじめに
ソフトウェアを配布する際に、コードサイニング(デジタル署名) を施しておくと、ユーザに対して「正規の発行元が作成した改ざんされていないファイル」であることを証明でき、セキュリティの信頼度が高まります。
今回の方法は、自前で証明書を作る「自己署名証明書」を使ったサイン手順のため、実際の運用では正式な認証局(CA)が発行する証明書を用いることが望ましいことに注意してください。
1. 前提条件
-
OpenSSL がインストールされている
- Win32 OpenSSL 等を利用する。
-
signtool.exe がインストールされている
- 通常、Windows SDK をインストールすると付属しています。
2. コードサイニング手順
ここからは具体的なコマンドとともに、exe ファイルに署名する一連の流れを解説します。
ステップ 1. 秘密鍵の生成
まずは署名に必要となる秘密鍵 (private key) を作成します。
キー長は 2048ビットの RSA を例にします。
openssl genrsa -out <private>.key 2048
-
<private>.key
のファイル名は任意です。 - このファイルは最重要情報なので厳重に保管してください。
ステップ 2. 証明書署名要求 (CSR) の作成
作成した秘密鍵から、証明書署名要求(CSR)を生成します。
openssl req -new -key <private>.key -out <cert>.csr
- コマンド実行中に5つほど質問が表示されます。
- Country Name、Organization Name などが代表的な項目です。
- テスト用であれば仮の入力でも構いませんが、必ず入力してください。
ステップ 3. 自己署名証明書の生成
CSR から「自己署名証明書」を作成します。
openssl x509 -req -days 365 -in <cert>.csr -signkey <private>.key -out <cert>.crt
-
-days 365
は、証明書の有効期限を 1 年に設定しています。必要に応じて変更してください。 - 作成される
certificate.crt
(例:<cert>.crt
)が自己署名証明書です。
ステップ 4. PFXファイルの作成
signtool.exe
で署名するときは、.pfx(PKCS#12形式) の証明書ファイルが必要です。
以下のコマンドで「秘密鍵+証明書」を一つにまとめた PFXファイルを作ります。
openssl pkcs12 -export -out <certificate>.pfx -inkey <private>.key -in <cert>.crt
- 作成時にパスワード入力を求められます(例:
<password>
)。 -
.pfx
ファイルも厳重管理対象です。
ステップ 5. exe ファイルへの署名
最後に、signtool.exe を使って exe ファイルに署名します。
signtool sign /fd SHA256 /f <certificate>.pfx /t http://timestamp.digicert.com /p <password> <実行ファイル>.exe
-
/fd SHA256
: 署名アルゴリズムの指定(SHA256 推奨) -
/f
: 使用する PFX ファイルのパス -
/t
: タイムスタンプサーバー(ここでは DigiCert の例) -
/p
: PFX ファイルのパスワード -
<実行ファイル>.exe
: 実際に署名したい exe ファイルのパス
これでexe ファイルに自己署名証明書でのコードサイニングが完了します。
右クリック → プロパティ → デジタル署名タブ などから署名が挿入されていることを確認できます。
3. 注意点
-
自己署名証明書を使った場合:
- Windows SmartScreen の警告を完全には回避できません。
- 発行元「自己署名」と表示されるため、第三者にとっては信頼度が低いです。
-
正式な運用で配布する場合:
- 認証局(CA)から発行されたコードサイニング証明書を用いるのが望ましいです。
- 実費がかかる一方、ユーザがダウンロード・実行時に「安全」と判定される可能性が高まります。
4. 手順まとめ表
各ステップを簡単にまとめた表を作成しました。
こちらを CSV としてダウンロード・利用していただけます。
手順 | コマンド例 | 説明 |
---|---|---|
1. 秘密鍵の生成 | openssl genrsa -out <private>.key 2048 |
RSA 秘密鍵を作成 |
2. CSRの作成 | openssl req -new -key <private>.key -out <cert>.csr |
証明書署名要求(CSR)を作成 |
3. 自己署名証明書作成 | openssl x509 -req -days 365 -in <cert>.csr -signkey <private>.key -out <cert>.crt |
CSR から自己署名証明書を生成(1年間有効) |
4. PFXファイルの作成 | openssl pkcs12 -export -out <certificate>.pfx -inkey <private>.key -in <cert>.crt |
.pfx形式にまとめる(signtool.exe用) |
5. exeに署名 | signtool sign /fd SHA256 /f <certificate>.pfx /t http://timestamp.digicert.com /p <password> <exe> |
exeファイルにコードサイニング |
5. まとめ
- 秘密鍵 と 自己署名証明書 を OpenSSL で作成。
- その証明書を .pfx にまとめ、signtool.exe を使って exe ファイルに署名。
- Windows の「プロパティ → デジタル署名」や
signtool verify
で署名が確認できれば成功です。
自己署名であっても、開発テストや検証目的には十分活用できます。
ただし、本番配布では CA のコードサイニング証明書を使う方がユーザの安心・信頼が向上します。
ぜひご活用ください。