Open10

Windowsアプリのインストーラーのコード署名にどのベンダーが使われてるか調べてみた

KatzKatz

Windowsアプリをインストーラーなどで配布する際は、アプリのバイナリが改竄されていないことを証明するためにコード署名した状態で配布するのが一般的。
コード署名用証明書を発行しているベンダーはいくつかあるが、どこがよく使われていそうなのか、手元のPCにあった30個のインストーラーのコード署名を調べてみた。

証明書の発行者の確認はファイルのプロパティーの「デジタル署名」タブから辿ることで行える。

または、次のようにWindows SDKのsigntool.exeを使って表示させることも可能。

."C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe" verify /pa /v C:\Users\username\Downloads\Obsidian-1.8.10.exe

なお、ここで調べた情報を元にして、Sectigo社の証明書でコード署名する環境を整えた記事を別途公開した。

https://zenn.dev/inop/articles/7db6acf976c519

KatzKatz

コード署名証明書の発行者を使われてた件数順に並べた。

証明書発行者名 件数 コード署名証明書提供元
DigiCert Trusted G4 Code Signing RSA4096 SHA384 2021 CA1 14 Digicert Code Signing Certificates
Sectigo Public Code Signing CA R36 5 Sectigo Code Signing Certificates
Sectigo Public Code Signing CA EV R36 2 Sectigo Code Signing Certificates
SSL.com Code Signing Intermediate CA RSA R1 2 SSL.com Code Signing Certificates
Microsoft Code Signing PCA 2011 2 Microsoft自社コード署名専用?
Certum Code Signing 2021 CA 2 Certum Open Source Code Signing
DigiCert Global G3 Code Signing ECC SHA384 2021 CA1 1 Digicert Code Signing Certificates
Entrust Extended Validation Code Signing CA - EVCS2 1 Entrust EV Code Signing Certificates
Microsoft ID Verified CS EOC CA 02 1 Azure Trusted Signing
KatzKatz

Digicertコードサイニング証明書について

やはり利用件数が多い。
それなりの値段がするので企業利用だけかと思いきや、OBSインストーラー、VLCインストーラー、Go言語インストーラー、Ollamaインストーラー、Firefoxインストーラーなどオープンソースなアプリのコード署名にも使われているのが意外だった。
以下にDigiCertのコード署名証明書を使って署名していたインストーラーのファイル名を並べておく。

OBS-Studio-31.0.1-Windows-Installer.exe
NVIDIA_Broadcast_v2.0.1.25267890.exe
tailscale-setup-1.82.5-amd64.msi
go1.24.1.windows-amd64.msi
OllamaSetup.exe
LM-Studio-0.3.13-2-x64.exe
vlc-3.0.21-win32.exe
Firefox Installer.exe
AWSCLIV2.msi
DiscordSetup.exe
ZoomInstallerFull.exe
Slack.msix
ChromeSetup.exe
EpicInstaller-18.5.0.exe
CameraHub_2.0.0.5472_x64.msi

KatzKatz

Sectigo Code Signing Certificatesについて

DigiCertに続いて利用件数が多かった。
Sectigoのコード署名証明書の発行者はOVコード署名証明書とEVコード署名証明書で証明書が分かれていて、OVが5件、EVが2件だった。
Digicertに比べると手頃な価格で提供されているので、利用件数が多いのは納得できる。

SectigoのOVコード署名証明書を使って署名していたインストーラー。
Wireshark-4.4.5-x64.exe
BCompare-5.0.6.30713.exe
Git-2.49.0-64-bit.exe
1PasswordSetup-latest.exe
anki-25.02.4-windows-qt6.exe

SectigoのEVコード署名証明書を使って署名していたインストーラー。
BT-23.130.0-64UWD-Win10-Win11.exe
AMD_Chipset_Software_7.04.09.545.exe

KatzKatz

SSL.com Code Signing Certificatesについて

Sectigo Code Signing Certificatesと同じような価格帯なのでもう少し使われているかと思いきや2件のみ。

VOICEVOX.Web.Setup.0.23.0.exe
MediaInfo_GUI_25.04_Windows.exe

KatzKatz

Certum Code Signing Certificatesについて

Certum Code Signing Certificatesはオープンソース開発者向けにCertum Open Source Code Signingを安価に提供していて、以下2つのオープンソースプロジェクトのインストーラーで使われていた。

CrystalMarkRetro2_0_2.exe
WinMerge-2.16.48.2-x64-Setup.exe

KatzKatz

Entrust EV Code Signing Certificatesについて

Evernoteインストーラーが使っていた。

Entrust社はSSLの方の証明書でいろいろやらかしており、ChromeやFirefoxはEntrust社発行のSSL証明書を2024年末頃から信用しないようになっている。今のところEntrust社発行のコード署名証明書を信用しないようにするという動きは無さそうなのだが、そのうち影響があるやもしれないのでまだ使われているのが意外だった。
https://blog.webnames.ca/google-and-firefox-to-stop-supporting-entrust-ssl-certificates-what-you-need-to-know/

KatzKatz

Azure Trusted Signingについて

Obsidianのインストーラーが使っていた。

コード署名証明書は一般的に年間数十万円~数百万円するが、Azure Trusted Signingは月9.99USDで5,000署名まで行え、比較的安価なのが特徴。
ただし、2025年4月頃から参加要件が『米国またはカナダで設立3年以上経過した会社のみ』に変更されてしまったので日本で使えるのはまだ先ぽい。
https://learn.microsoft.com/en-us/azure/trusted-signing/quickstart?tabs=registerrp-portal%2Caccount-portal%2Ccertificateprofile-portal%2Cdeleteresources-portal#prerequisites

KatzKatz

じゃぁどのベンダーのコード署名証明書を使うのがよいのか?

TL;DR 使いたいベンダーのコード署名証明書を使えば良さそう。

以前は『EVコード署名証明書でコード署名するとWindows DefenderのSmartScreenを無条件で通過するから、SmartScreenでトラブりたくなかったらEV証明書を買うと良い』というベストプラクティスがあったようだ。
https://learn.microsoft.com/en-us/answers/questions/417016/reputation-with-ov-certificates-and-are-ev-certifi

しかし、『2024年8月からはEV証明書を特別扱いせずOV証明書と同等に扱う』という旨の発表がMicrosoftからあったので、EV証明書でコード署名してもSmartScreenを無条件通過するわけではなくなった模様。
https://learn.microsoft.com/en-us/security/trusted-root/program-requirements#d-code-signing-root-certificate-requirements

では、OV証明書でのコード署名で問題が生じるかというとそうでもなさそうで、実際にOV証明書でコード署名しているWiresharkやObsidianのインストーラーでも特にSmartScreen警告が出ることもない。よって、コード署名にOV証明書を使っても差し障りは特に発生していなさそうだと言えそう。

つまり、EV証明書でもOV証明書でも差はなさそうなので、使いたいベンダーの使いたいコード署名用証明書を選べば良さそう。

KatzKatz

コード署名したのにSmartScreenにひっかかったらどうする?

SmartScreenはレピュテーションを元にバイナリの安全性の判定をするようなので、コード署名したバイナリが世の中に浸透するに従ってSmartScreenに引っかからなくなるようになる。よって基本は時間が解決する。

能動的にできることがあるとするならば、間違ってSmartScreenに引っかかっているバイナリファイルを以下URLからMicrosoftに送信できるので、送ってみるとよいかもしれない。
https://www.microsoft.com/en-us/wdsi/filesubmission