最も安い?コード署名証明書の取得(&使い方)
2024/07/14追記
2023/04以降、Sectigo系証明書が USBトークン必須化&大幅値上げされており、「概要」以降の内容は古くなりました。
今は MS Trusted Signing が一番安く($9.99/月、税抜、法人向け)、次に certum が安い様子(3年/USBキー/送料込 $495、OSS開発者用あり)。
・MS Trusted Signing 公式資料
・Qiita記事: AzureがよくわからなくてもTrustedSigningを設定するまで
・Signtool.exeから使うための設定
(バッチから signtool.exe を呼び出す場合、call az loginでログイン状態にするか
AZURE_TENANT_ID / AZURE_CLIENT_ID / AZURE_CLIENT_SECRET の環境変数を設定)
番外: Paint.NET作者さんのボヤき
実績値:2024/7/1~7/31の1か月分で1,764円でした。($9.99 * 1.10(税) * 160.5円/ドル(6月末レート)
概要
最も安い?コード署名(コードサイニング)証明書の取得(&簡単な使い方)の紹介です。
目的
インストーラ等のバイナリを配布する際、そのまま配布するとSmartScreenによってブロックされたり、アンチウイルスソフトによって、ウイルスと誤検出される可能性が高くなります。
コード署名証明書を取得して、バイナリにコード署名を付与することで、これらの問題を防ぐことが出来るようになります。
ただし、お値段高め
コード署名証明書の価格はSSL証明書に比べて高めです。特に日本語でコード署名証明書を取得しようとすると、最も安いコモドジャパンでも2.2万円/年ほど掛かります。シマンテックに至っては9.7万/年というゴージャス価格になっています。
簡単な英語メール(英会話は不要)でも構わなければ、the ssl store(thesslstore.com) という代理店が最も安く、$248/3年、という価格で取得できます。今回はこの代理店経由でコード署名証明書を取得したので、その経緯をまとめます。
(2023/1/26) (下記、「COMODO」は現在は「Sectigo」というブランド名になっていますので、適宜読み替えて下さい)
手順
大まかには、下記のような手順になります。
- DUNS番号取得(東京商工リサーチ)
- the SSL Store での COMODOコード署名購入手続き
- COMODOとの認証手続き
- コード署名証明書のダウンロード&Windows証明書ストアへのインポート
- SignToolでの署名(使い方)
DUNS番号の取得
コード署名を取得する際、実際の証明書の発行元であるCOMODOの認証(組織の実在証明)を受ける必要があります。
この際、DUNS番号があると自動電話応答での確認のみで済みます。
東京商工リサーチでDUNS番号を申請&取得します。3,240円&数日掛かります。
DUNS番号は(法人以外に)個人事業主等の法律上の商業的な組織であれば、取得可能なようです。
(従い、コード署名証明書も同様の条件で取得可能のはず、ただし未確認)
the SSL Store での COMODOコード署名証明書の購入手続き
通常のネットショッピングとほぼ同じですが、組織情報も入力する点だけが少し違います。
(なお、サポートは24時間チャット対応で、かなり親切でした)
(2021/9/24) 購入後の申請フォームで CSR(Certificate Signing Request) の入力
CSRを生成する方法としては opensslを使う、古いFirefox 68.9ESR でフォーム内で自動生成、の2通りがあります。
ここでは openssl を使う方法の説明。(Firefox 68.9ESR なら自動生成可能)
$ openssl genrsa -out my_private.key 4096
$ openssl req -new -key my_private.key -out my_request.csr (CSR作成に必要な場所や組織名等を入力)
この my_request.csr の中身をCSRフィールドに貼り付けます。
(my_private.key も後述の .p12ファイル生成に必要になります)
COMODOとの認証手続き
- コモドから「組織情報を検証できません」とのメール連絡。
- メールに記載してある申し立て用URLから、こちらのDUNS番号を伝え、この番号で組織情報を検証してください、と通知。
- コモドから「OK. 最終コールバック確認として次のURLにアクセスのこと。ボタンを押すとDUNS記載の電話番号に自動発信し、音声で暗唱番号を伝えるので、その暗唱番号をフォームに入力してくれ」とのメール。
- URLにアクセスすると「電話発信」ボタンと共に言語選択があり「日本語音声」も選択肢に。
- 自動発信の電話を受信し、その音声が伝える暗唱番号をフォームに入力すると、無事認証完了。
(ただし日本語の音声内容は「番号は、です、NNNN」という「the number is NNNN」を単語単位で直訳したと思われる日本語(笑))
(2021/9/24) 更新手続きでは上記COMODOの認証フェーズは不要
コード署名証明書のダウンロード&Windows証明書ストアへのインポート
- コモドから「コード署名証明書が準備できました」というメールに、ダウンロード用URLとアクセスキーが記載されている。
- (2021/9/24) ここで CSR生成に openssl を使ったか、Firefox68.9ESR を使ったかで別れる。
opensslでCSR生成していた場合、
- 上記URLから証明書を適当なブラウザで受け取ると CollectCCC という証明書ファイルがダウンロードできる。
- これに private.key 情報を入れた p12ファイルを作る。
% openssl pkcs7 -inform der -in CollectCCC -print_certs -out CollectCCC.pem
% openssl pkcs12 -export -out my_cert.p12 -inkey my_private.key -in CollectCCC.pem
Firefox68.9ESRでCSR生成していた場合、
- 同じブラウザで受け取ると、Firefoxの証明書ストアにインポートすることができる。
- Firefoxの証明書マネージャーから格納した署名を「バックアップ」の形で .p12ファイルをexportする。
最後にこの .p12ファイルをダブルクリックしてWindows証明書ストアにインポートして終了。
SignToolでの署名(使い方)
- Windows SDKをインストール
- C:\Program Files (x86)\Windows Kits\10\App Certification Kit に移動
- SHA-256署名 signtool.exe sign /a /i Sectigo(=発行者名) /tr http://timestamp.digicert.com /fd sha256 xxx.exe
- /asオプションにすると、コード署名が追加される形に。
- 署名の削除は signtool.exe remove /s ファイル名
感想
ということで、思っていたよりも簡単にコード署名証明書の取得が完了しました。
「英語でコールバック電話のやりとりが必要」と身構えていたところ、日本語の自動音声を聞き取るだけでOKでした。
なお、コード署名したバイナリを配布し始めて、2週間程度(ただしダウンロード数はかなり多め)で「署名さえ付与すれば、新しいバイナリでもSmartScreenは何も警告を出さず」という状態になりました。めでたしめでたし。
備考
- SignToolでは、PEヘッダを持っているexe/dll等に署名可能(それ以外にCABも可能?)。
- p12ファイルを指定して、Acrobat Reader や PDF XChange Proでの署名も一応可能(ただしAcrobat Reader上ではWindows系のルート証明書を標準で認めないため、署名済みPDFの検証で検証できない旨の警告が出る。PDF XChangeは問題ない)。
- Lets Encryptならぬ、Lets CodeSigning とかできると良いなぁ、とか思ったり。
- Firefox 68.9ESRを使う場合は、こちら判り易いかも。 「コード署名証明書」を海外サイトからお手軽価格で購入する
- こちらも参考なりました。 「コードサイニング証明書を買う前に」
ただし、「英会話力が必要」という部分、COMODOの認証に関しては古い情報となっているようです。 - DUNS番号取得から、COMODO側のDBでDUN番号が確認可能になるまで数日必要な様子。DUNS取得から2-3日寝かしてから申し込んだ方が良いかもしれません。