HOME Tech Memo FastCopy IP Messenger

最も安い?コード署名証明書の取得(&使い方)

リスト 白水啓章
作成 2018/10/15
更新 2024/08/28

2024/07/14追記

2023/04以降、Sectigo系証明書が USBトークン必須化&大幅値上げされており、「概要」以降の内容は古くなりました。
今は MS Trusted Signing が一番安く($9.99/月、税抜、法人向け)、次に certum が安い様子(3年/USBキー/送料込 $495、OSS開発者用あり)。

MS Trusted Signing の情報まとめ(2024/08/28)

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」というブランド名になっていますので、適宜読み替えて下さい)

手順

大まかには、下記のような手順になります。

  1. DUNS番号取得(東京商工リサーチ)
  2. the SSL Store での COMODOコード署名購入手続き
  3. COMODOとの認証手続き
  4. コード署名証明書のダウンロード&Windows証明書ストアへのインポート
  5. 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との認証手続き

  1. コモドから「組織情報を検証できません」とのメール連絡。
  2. メールに記載してある申し立て用URLから、こちらのDUNS番号を伝え、この番号で組織情報を検証してください、と通知。
  3. コモドから「OK. 最終コールバック確認として次のURLにアクセスのこと。ボタンを押すとDUNS記載の電話番号に自動発信し、音声で暗唱番号を伝えるので、その暗唱番号をフォームに入力してくれ」とのメール。
  4. URLにアクセスすると「電話発信」ボタンと共に言語選択があり「日本語音声」も選択肢に。
  5. 自動発信の電話を受信し、その音声が伝える暗唱番号をフォームに入力すると、無事認証完了。
    (ただし日本語の音声内容は「番号は、です、NNNN」という「the number is NNNN」を単語単位で直訳したと思われる日本語(笑))

(2021/9/24) 更新手続きでは上記COMODOの認証フェーズは不要

コード署名証明書のダウンロード&Windows証明書ストアへのインポート

  1. コモドから「コード署名証明書が準備できました」というメールに、ダウンロード用URLとアクセスキーが記載されている。
  2. (2021/9/24) ここで CSR生成に openssl を使ったか、Firefox68.9ESR を使ったかで別れる。

opensslでCSR生成していた場合、

  1. 上記URLから証明書を適当なブラウザで受け取ると CollectCCC という証明書ファイルがダウンロードできる。
  2. これに 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生成していた場合、

  1. 同じブラウザで受け取ると、Firefoxの証明書ストアにインポートすることができる。
  2. Firefoxの証明書マネージャーから格納した署名を「バックアップ」の形で .p12ファイルをexportする。

最後にこの .p12ファイルをダブルクリックしてWindows証明書ストアにインポートして終了。

SignToolでの署名(使い方)

  1. Windows SDKをインストール
  2. C:\Program Files (x86)\Windows Kits\10\App Certification Kit に移動
  3. SHA-256署名 signtool.exe sign /a /i Sectigo(=発行者名) /tr http://timestamp.digicert.com /fd sha256 xxx.exe
  4. /asオプションにすると、コード署名が追加される形に。
  5. 署名の削除は signtool.exe remove /s ファイル名

感想

ということで、思っていたよりも簡単にコード署名証明書の取得が完了しました。
「英語でコールバック電話のやりとりが必要」と身構えていたところ、日本語の自動音声を聞き取るだけでOKでした。

なお、コード署名したバイナリを配布し始めて、2週間程度(ただしダウンロード数はかなり多め)で「署名さえ付与すれば、新しいバイナリでもSmartScreenは何も警告を出さず」という状態になりました。めでたしめでたし。

備考

  1. SignToolでは、PEヘッダを持っているexe/dll等に署名可能(それ以外にCABも可能?)。
  2. p12ファイルを指定して、Acrobat Reader や PDF XChange Proでの署名も一応可能(ただしAcrobat Reader上ではWindows系のルート証明書を標準で認めないため、署名済みPDFの検証で検証できない旨の警告が出る。PDF XChangeは問題ない)。
  3. Lets Encryptならぬ、Lets CodeSigning とかできると良いなぁ、とか思ったり。
  4. Firefox 68.9ESRを使う場合は、こちら判り易いかも。 「コード署名証明書」を海外サイトからお手軽価格で購入する
  5. こちらも参考なりました。 「コードサイニング証明書を買う前に」
    ただし、「英会話力が必要」という部分、COMODOの認証に関しては古い情報となっているようです。
  6. DUNS番号取得から、COMODO側のDBでDUN番号が確認可能になるまで数日必要な様子。DUNS取得から2-3日寝かしてから申し込んだ方が良いかもしれません。