はじめに
今回は自作の.exeファイルを自己署名を入れる方法を紹介します。
なにかしらの「.exe」ファイルがあることを前提に進めます。

.exeファイルの作り方はこちらなどをご覧ください。

RUSTは実行プログラムを作った時点で.exeに変換されます。
便利。
署名とはなにか
.exeファイルの信頼性を上げるモノです。
他の人の手で改ざんされてないことの証明などに使われます。
【署名の種類】
・認定局による署名(DigiCert, Sectigo)
→ 年数万円ぐらいかかる
→ 企業向け
・自己署名
→ 自分が行った署名データ
→ 信頼性は低いがないよりはマシ
→ フリーソフトや個人開発ソフト向け
この「署名」があることでWindows OSなどで「ウイルス」と誤判定されるリスクを減らせれます。
署名の確認方法
.exeファイルを選択。
→ Alt+Enterキーを入力。

デジタル署名を確認。
署名があれば「埋め込み署名」の所に情報が出ます。

自己署名する手順
自己署名する手順は下記。
・署名データを作成しパソコン内に格納
・パソコン内から署名を引き出せるようにする
・.exeに署名データを入力。


この操作を全て「PowerShell」上で行います。
こちらを解説していきます。
署名データを作成しパソコンに格納
Windowsキー → sheと検索で入力。
Windows PowerShellを起動。

条件に合わせて下記の一文を改造して入力。
(黄色いところに注意)
New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=Your Name" -CertStoreLocation "Cert:\CurrentUser\My"

要素分解すると下記の4つです。
New-SelfSignedCertificate
→ 署名情報を作ります
-Type CodeSigningCert
→ 署名の種類を選択
→ CodeSigningCertは実行ファイル用(.exe)
-Subject "CN=Your Name"
→ 署名に表示する名前
→ 名前の最初に署名者の属性を入れる形式が使われる(X.500 DN)
→ CN=名前, O=組織名, C=国 + 名前形式で入力
-CertStoreLocation "Cert:\CurrentUser\My"
→ 署名の保存先
→ Cert:\CurrentUser\Myは「現在ログインしてるWindowsユーザーに保存」
→ Cert:\LocalMachine\Myで「PC全体でも使えるようにできる」
→ どっちでもいい、何かしら決めることが重要


Typeは実行ファイル以外にも文章やサーバー用のモノがあったりします。
細かいことはChat GPTあたりに聞きましょう。
先ほどの文章を入れてエンターキー。
すると署名のIDのようなものと署名に表示される名前が出てきます。

これで署名データを作成しパソコン内に格納することができました。

署名データを引き出す
次は保存した署名データを引き出して使えるようにします。

条件に合わせて下記の一文を改造して入力。
(黄色いところに注意)
$cert = Get-ChildItem Cert:\CurrentUser\My | Where-Object {$_.Thumbprint -eq "----生成されたID---- "}
要素分解すると下記の4つです。
$cert =
→ 変数に情報を格納
→ ただの変数宣言なので$aaaaのような適当な名前でも動く
Get-ChildItem Cert:\CurrentUser\My
→ 署名がどこに保存されてるかを伝える
| Where-Object {$_.Thumbprint -eq "----生成されたID---- "}
→ 署名の保存先からIDで今回使う署名情報を確定する


$cret = で署名情報が入力されることで…
「$cert」が署名の情報に変換されます。
先ほどの処理から下図の2か所が対応してればOKです。

こちらを入れたらEnterキー。
これで署名が使える状態になります。

これで「パソコン内から署名を引き出す」工程が完了です。

署名データを使う(.exeに署名)
次はパソコンから引き出した署名データを.exeに割り当てていきます。

条件に合わせて下記の一文を改造して入力。
(黄色いところに注意)
Set-AuthenticodeSignature -FilePath .exeファイルがある場所のパスと.extの名前 -Certificate $cert -HashAlgorithm SHA256
要素分解すると下記の4つです。
Set-AuthenticodeSignature
→ 署名処理を実行
-FilePath .exeファイルがある場所のパスと.extの名前
→ どのファイルに処理を割り当てるか指定
-Certificate $cert -HashAlgorithm SHA256
→ 署名の形式を指定(基本はSHA256でok)
-FilePathの指定はしっかり「.exe」の実行ファイル名まで含めてください。

これを実行。
これで.exeに署名ができます。

あとは再度.exeファイルを選択 → Alt+Enterキー。

デジタル署名を確認・
すると設定した名前の署名が入ってます。

以上が自作の.exeファイルを自己署名を入れる方法です。
まとめ
今回は自作の.exeファイルを自己署名を入れる方法を紹介しました。
・署名とはファイルの信頼性を上げるための情報
・署名が無いとウイルスと誤判定されるリスクが上がる
・自己署名はPowerShellを操作すれば行える
・署名情報はプロパティ → デジタル署名の所で確認
また他にもプログラムやパソコンについて解説してます。


ぜひこちらもご覧ください。
コメント