[Windows]デジタル証明書によって Windows の保護メッセージを回避する

個人開発したほとんどのインストーラー(exe)は、他人の PC で実行するとこのメッセージによってブロックされてしまいます。

一見「実行しない」しかボタンがないので、ここでインストールを止める人はかなり多いです。
一応「詳細情報」を押せば「実行する」ボタンが出るのですが、「ちょっとインストールしてみようかな」というライトユーザーはもうここで「やっぱやめよ」となってしまいます。

このメッセージが出て TeraPad がインストールできない! 助けて! と友達に言われたことが。

デジタル署名とは

この警告を回避する手段として、自分で作った exe に、自分で証明書を付与してみましょう。
正直それで信頼されるってどうなの? という疑念は拭えませんが、これを行うことで Microsoft Defender / Windows10 の青い警告ウィンドウは出なくなります。

OpenSSL をインストール

ダウンロードにはいくつか選択肢がありますが、私は Win64 OpenSSL v1.1.1s をダウンロードしました。最新がよければ v3.0.7 がいいでしょう。Light は開発者向けではないようですので、選ばないようにしてください。

以下、説明が必要そうなウィザード画面だけ紹介します。

これは当然「はい」

ライセンスは英語ですが、一通り目を通すようにしましょう。
「州の暗号に関する法律、規則、および規制を満たしている」かどうかは、いち開発者が判断するのは難しい問題ですが…。

ここは下の The OpenSSL Binaries (/bin) directory が安全。The Windows system directory は、OpenSSL 実行中にファイルアクセス権限の問題が出そうで怖い。

OpenSSL は進化のために寄付を募っています。
いま円しか持ってないので、後で寄付しよう。というのであれば✔をはずし、Finish。

インストールを確認

コマンドプロンプト(管理者権限)で、以下のコマンドを実行。
インストールディレクトリを変更した人は、自分の環境に合わせてください。

"C:\Program Files\OpenSSL-Win64\bin\openssl" version

OpenSSL で証明書を作成する

以下の4ファイルを作成する手順です。”D:\" に作成するものとします。

digital.key
digital.csr
digital.crt
digital.pfx

"C:\Program Files\OpenSSL-Win64\bin\openssl" と記述するのが面倒なので、パスを移動しましょう。

cd C:\Program Files\OpenSSL-Win64\bin

少し知識があれば「環境変数(Path)に登録した方がよくない?」と思いますが、そうしたところ「openssl.cnf がないよ」という天からの声(エラー)により色々と追加設定が必要そう&面倒そうだったので、紹介しません。

digital.key を作成

openssl genrsa 2048 > d:\digital.key

digital.csr を作成

openssl req -new -key d:\digital.key > d:\digital.csr

いくつかの質問に答える必要があります。
全部空欄でもいいのかもしれませんが、当然信用情報としては価値が下がる(と、思う)ので、可能な限り正直な情報を入れておきたいところです。私の例を載せておきます。

Organization Name: 組織名
Organizational Unit Name: 組織の中の役職?
Common Name: あなたの名前
Email Address: あなたに連絡可能なメールアドレス
A challenge password: いるのか不明だが、とりあえず設定

digital.crt を作成

openssl x509 -days 3650 -req -signkey d:\digital.key < d:\digital.csr > d:\digital.crt

2つのファイルを元にして digital.crt を作成します。
なお、days は「その認証証明書の保証期間」です。
1 年であれば 365、10 年であれば 3650 となります。10 年保証て…。

digital.pfx を作成

openssl pkcs12 -export -inkey d:\digital.key -in d:\digital.crt -out d:\digital.pfx

パスワードを聞かれます(2回)。他人にわからないパスワードにし、ここで設定したパスワードは記憶しておきましょう(この後で使います)

exe に証明書を埋め込む

signtool.exe を使います。こちらは Visual Studio をインストールしていた場合、自動的にインストールされていると思います。

いっぱいありすぎてどれにするか迷ったのですが、とりあえず x64 版を使ってみます。
App Certification Kit というフォルダにも x64 版が入っているようです。

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe" sign /f d:\digital.pfx /p [pfxのパスワード] /fd sha256 /tr http://timestamp.digicert.com "[埋め込む exe のパス]"

間違えて署名してしまった場合、削除することもできます。

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe" remove /s "[埋め込む exe のパス]"

実際に確認する

埋め込んだ exe(sample.exe)のプロパティを確認します。
まずは埋め込む前。

次は埋め込み後。「デジタル署名」が追加されています。

これで、最初にあった Microsoft Defender の PC 保護ダイアログが出なくなりました。

こんなの、ただのオレオレ証明書じゃない?

仰る通りだと思います。

なお、私が確認した Windows10 では PC 保護ダイアログはでませんでしたが、Windows11 だったり、セキュリティレベルを上げていたりで、表示される事もあるでしょう。

では、他人にも評価された証明書にしようとするとかなり高額の年会費がかかります。
安いところでも年 1~3 万、シマンテックに至っては年 10 万。

また、頑張ってお金をかけても、それが絶対の証明とは言えないのも悲しい所です。
シマンテックの証明を受ければ、さすがにノートンがウィルス扱いにすることはないでしょうが、ウィルスバスターやマカフィーにケチをつけられる可能性はあります。

以前、Capcomがランサムウェアの被害にあった際に実行された exe はきちんとしたデジタル署名が付与されていたそうです。(ロシアの有限会社と、GlobalSign 正規のダブル証明)
詐欺師が「ボクを信用して」とばかりに身なりや立ち振る舞いに気を配るように、悪意を持ったプログラムも、デジタル証明書などで化粧している可能性があるため、「問題のないデジタル証明書」と表示されたからといって安全ではないのが難しいところですね。

今回の「オレオレ証明書」は現実に例えるなら、ビジネスの飛び込み営業に行く際、パーカーにダボダボのハーフパンツではなく、スーツで臨む、くらいのイメージだと思います。
過信してもいいことはありませんが、やらないよりはやった方がいい、そのくらいのイメージで考えてください。

Apple の Notarization のような仕組みを Microsoft 公式でやってくれないかなー、といのが正直な気持ち。Microsoft が大変だけど…。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA