Help us understand the problem. What is going on with this article?

Windowsネイティブアプリにコードサイニング証明書をつける

SENSYN ROBOTICS(センシンロボティクス) Advent Calendar 2019 の 8日目 担当の @Chitama です。
センシンロボティクス という会社で Webやアプリを担当しています。

今回は、Windowsネイティブアプリで必要になるコードサイニング証明書の付与についてまとめてみました。

検証環境

  • Windows 10
  • Internet Explorer 11

コードサイニング証明書とは

コードサイニング証明書 (Codesigning) とは、オンラインで配布するソフトやプログラムにコード署名をして、ソフトウェアの開発元/配布元を明確にさせることで、コンテンツの完全性を証明するためのものです。

なぜ、コードサイニング証明書をつける必要があるのか?

こんな画面をみたことはありませんか?
trends
この機能は、Microsoft SmartScreen というWindowsに最初から入っている標準セキュリティ機能で、Webからダウンロードしたアプリケーションの配布元がわからないから危険かもしれないけど大丈夫?という警告です。
この警告が表示される原因は主に次の2つです。

  • 危険なサイトにアクセスしたり、危険なアプリケーションをインストールしようとしたりしている
  • Webサイトやアプリケーションの安全性を調べるためのデータベースに接続できない

危険なアプリケーションと検知されないためにコードサインング証明書をアプリケーションにつけるわけです。

設定の流れ

1.コードサイニング証明書のタイプを選ぶ
  ↓
2. コードサイニング証明書の会社を選ぶ
  ↓
3. コードサイニング証明書を購入する
  ↓
4. コードサイニング証明書を申請する
  ↓
5. コードサイニング証明書をアプリケーションに付与する

所要時間

今回選択したコモドジャパンでは、購入からアプリへの証明付与まで1週間ほどでできました。
ただし、会社の実在証明として帝国データバンクもしくは東京商工リサーチ(ダンレポ)の登録している場合です。

購入して、営業時間内であればすぐに申請方法のメールが届く。(1日)
申請して、申請受領のメールが届く。(2日~3日)
申請結果が届く。(2日~4日)

実際、水曜日の午後に申請して、次の週の水曜日の真夜中に申請通過のメールが届きました。
参考:【徹底比較】帝国データバンクと東京商工リサーチは何が違う?どっちの情報が正しい?

1. コードサイニング証明書のタイプを選ぶ

コードサイニング証明書には通常のコードサイニング証明書とEVコードサイニング証明書があります。

署名有無 SmartScreen
署名なし 警告あり。 [詳細情報] から [実行] ボタンが表示できる
通常コードサイニング 警告あり。 [実行] ボタンの表示あり。
EVコードサイニング 初回から警告なし。ドライバーへの更新がある場合は必須。

今回は、次の理由で通常タイプとしました。

  • ドライバーへの変更ない
  • EVコード署名が高い(通常コードサイニングの約3倍)
  • 通常コード署名でも10数回のダウンロード実績を稼げは警告が出なくなる

2. コードサイニング証明書の会社を選ぶ

今回は次の優先度で製品を選定しました。
① セキュリティレベル
② 価格
③ サポート体制
④ 実在確認の手間

複数の会社へ相見積や営業さんにヒアリングしたりした結果、 価格によるセキュリティレベルに差はありません。
一番安くて価格と日本語対応可能なコモドジャパンに決めました。
申請後の実在確認としてコールバックと呼ばれる電話がかかってきます。
英語での電話対応は不安だったので日本語でのコールバックはポイントでした。

コモドジャパンのコードサイニングは次のような仕様です。
image.png
参照:コモドジャパン

ここで、SmartScreen 即時解除 が非対応になっているので、疑問に思った方もいるかと思います。
SmartScreenが非対応ではなく、 SmartScreenの即時解除が非対応ということで、ファイルのダウンロード実績が少ないときに、SmartScreenの警告が表示されます。
これは10数回ダウンロードすれば解消されるので、問題ないのです。

3. コードサイニング証明書を購入する

コモドジャパンでは、アカウントを作ってWebのマイページから購入できます。
営業時間内に購入すれば、1時間以内にコモドジャパンから申請に関するメールが届きます。
件名: 【COMODO JAPANより】コードサイニングのご注文について 注文番号:xxxxxx

  • 価格:¥ 21,000円(税別)~
    • (年額)5年だと1万円off 94,200円(税別)~

4. コードサイニング証明書の申請する

購入完了メールに添付されたマニュアルにしたがって申請します。
注意ポイントは2つ。

  • 申請で利用したPC端末でしかコードサイニング証明書の付与はできない
  • 申請で利用するブラウザは、Internet Explorerのみ

申請の流れは次のとおりです。

1.コモドジャパンに、申請と書類の提出
 http://comodo.jp/support/codesign_2nd_val.html
  ↓
2.Webから申請後、国内審査を実施
  ↓
3.国内審査が無事通過したあと、本部の認証局側で審査を実施
  ↓
4.認証局側の審査が通過すると、コモドジャパンから最終審査(コールバック)が通知される
  ↓
5.最終審査が終了後、認証局(本部)より、申請時に入力されたメールアドレス宛に コレクションコード 送付される

5. コードサイニング証明書をアプリケーションに付与する

申請したPC端末でコレクションコード 送付されたメールに記載されているリンクを開いて証明書をインストールします。
インストールしたPFX (証明書と秘密鍵) を、SignToolを使ってEXEファイルに署名します。

# PCに保存・接続されている最適な証明書を使用してファイルに自動的に署名
signtool sign /a TargetApp.exe
# パスワードで保護された PFX ファイルを指定してファイルにデジタル署名
signtool sign /f MyCert.pfx /p MyPassword TargetApp.exe
# ファイルにデジタル署名してタイム スタンプを付与
signtool sign /f MyCert.pfx /t http://timestamp.sectigo.com/authenticode TargetApp.exe
# PCに保存・接続されている固有の証明書名 (例 ”My Company Certificate”) を指定してファイルに署名
signtool sign /n "My Company Certificate" TargetApp.exe
# ActiveX コントロールをユーザがインストールする際に表示させる情報として予め作成したURLを指定
Signtool sign /f MyCert.pfx /d: "TargetControlApp" /du http://www.example.com/MyControl/info.html TargetControlApp.exe
# デジタル署名済みのファイルにタイムスタンプを付与
signtool timestamp /t http://timestamp.verisign.com/scripts/timstamp.dll TargetApp.exe
# ファイルが署名済みであることを確認
signtool verify TargetApp.exe
# カタログで署名されている可能性があるシステムファイル確認
signtool verify /a SystemFile.dll

注意点

  • Win10よりGUIは廃止になったので、コマンドラインで作成します。
  • SmartScreenの即時解除が非対応 なので、アプリをダウンロードさせたいサイトからダウンロードを10回ほど繰り返して、警告がでないように実績を上げておきます。

まとめ

  • 最新のまとまった情報が少なかったです。
  • 申請は英語のサイトでしたが、マニュアルが送付されるので問題はありませんでした。
  • 何かあっても、問い合わせの返信が翌営業日にはくるので、サポートも十分でした。

9日目は SENSYN DRONE HUB 担当の @nakayamaatsushi さんです✨

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした