「自身で作ったアプリを配布して実行できるようにしたい。」そんなときに避けて通れないのがコード署名(code signing)です。

高まるコードサイニング証明書の重要性』にもある通り、コードサインにより署名されたプログラムの配布は今やスタンダードとなっています。また、『コードサイニング証明書の仕様変更に関するお知らせ』を受けて、物理型、クラウド型を問わず、HSMへの格納が必須になる等、例年コードサイニング証明書の取り扱いはより厳重化される傾向にあります。

既存のサポートページは充実しているものの、「トークン格納版における証明書の取得から、署名までやってみた流れが載っているコンテンツがあれば、よりユーザーのイメージが付きやすくなる」と考え、今回はユーザーの視点から、実際の署名まで一連の作業を実施する方法をご紹介します。

初めに

本例では、Visual Studio Community 2022(※以降VSCと表記)を使用し、署名用プログラムの作成、プログラムへの署名を実施します。

尚、今回は署名の長期検証が可能となるタイムスタンプも付与するため、
VSCを用いて署名する場合、少なくとも2019以上のverを推奨いたします。
※古いverのVSCがデフォルトでSHA1のタイムスタンプリクエストを使用する問題があるためです。
ERROR: Using timestamp server with sha256 results in "The specified timestamp server either could not be reached or returned an invalid response" - Developer Community

この記事の目的

Windows環境から、USBトークンを使ったコード署名を実行する方法を解説します。

前提条件

グローバルサインの証明書が格納可能なUSBトークンを取得済みであること

環境

Windows Server 2025 Datacenter、Windows11、Visual Studio Community 2022

※今回はパブリックの証明書ではなく、弊社検証環境のステージングルートの証明書を使用します。

ユーザーによる証明書の申請~取得まで

① 弊社サポートページ『[Fortifyを使用する場合]証明書をUSBトークンにインストールする方法』を参考に、証明書申請用のパネルにログインし、「証明書発行」を選択します。

手順画像①.png

② サービス選択からコードサイニング証明書を選択し、次へ進みます。

手順画像②.png

③ 鍵生成オプションでは、お問い合わせの多い「Fortify」を選択します。

手順画像③.png

④ 証明書の情報を入力し、申請を進めていきます。

手順画像④.png

⑤ 申請が完了しました。

手順画像⑤.png

⑥ 申請完了後、受信確認メールが送信されるので、対応します。
メールタイトル:
グローバルサイン /受信確認手続きのお願い:OS2025●●●●●●●●●

⑦ 受信確認に対応し、審査対応完了後証明書取得用メールを受信します。
メールタイトル:
[グローバルサイン]電子証明書取得のお願い/OS2025●●●●●●●●●: コモンネーム

⑧ USBトークンを端末に識別させるため、ドライバをインストールします。弊社サポートページ『Windows用USBトークンドライバのインストール方法』をご参照ください。
ポイント:ドライバはUSBトークンや、Windowsとの最適な組み合わせがあるため、適宜verを合わせること

手順画像⑥.png

⑨ 環境を確認し、最新版のドライバ10.8 R9をインストールします。
ポイント:インストールの過程でドライバーのインストールタイプを確認されるが、
デフォルトの「typical」で問題ないです。

手順画像⑦.png

⑩ドライバーのインストールが完了しました。

手順画像⑧.png

⑪ドライバーをインストールしたことにより、USBトークンが端末に識別されるようになりました。
ポイント:マイトークンと表示されればOK

手順画像⑨.png

⑫ 続いて、鍵生成オプションでFortifyを選択したため、Fortifyのダウンロードに進みます。
ポイント:基本的には弊社サポートページ通りに進むこと。
インストールオプションはデフォルトで問題ありません。

手順画像⑩.png

⑬ インストール完了後、タスクメニューからFortifyが確認可能となります。

手順画像⑪.png

ポイント:Windowsのタスクバーのtoolメニューから開いたFortifyの画面
ここでもsafenet eToke5110ccが識別されていることを確認しておくのが無難

手順画像⑫.png

⑭ 証明書取得用URLから取得作業を進めます。申請時に入力した証明書取得用PWを入力します。

手順画像⑬.png

⑮ 利用約款に承諾します。

手順画像⑭.png

⑯ Fortifyが起動し、証明書の内容確認画面が表示されます。問題がなければ「作成」を押してください。

手順画像⑮.png

⑰Fortifyが起動し、トークンへのアクセスが求められます。

手順画像⑯.png

⑱トークンのパスワードを入力後、ブラウザ上で鍵生成が始まります。
ポイント:鍵生成に時間がかかるケースもありますが、何も操作はせず、待機すること

手順画像⑰.png

⑲ 鍵生成が完了すると、以下の画面の表示となります。「実行」ボタンを押して証明書のインストールを行います。

手順画像⑱.png

⑳ 証明書がトークンに格納されました。

手順画像⑲.png
手順画像⑳.png

㉑トークン内で証明書のチェーンが組めるよう、ルート証明書・中間CA証明書をインポートします。

手順画像㉑.png

トークンのパスワードを入力し、次へ進みます。

手順画像㉒-1.png

CA証明書という項目が設けられ、証明書が格納されました。

 

手順画像㉒-2.png

署名対象のファイルの作成まで

① VSC上で署名を行うEXEファイルを作成します。今回はVisual StudioでPythonの簡単なアンケート実行ファイルを作成します。

手順画像23.png

② 実行ファイルをクリックすると好きな色を聞いてくる実行ファイル【カラーアンケート.exe】を作成しました。

カラーアンケート①.png

③ デジタル署名は付与されていないことも確認します。

カラーアンケート②.png

実際の署名から検証まで

① 今回はvisual Studioがある環境なので、signtoolも既存のものそのまま利用します。
※signtool.exeはVisual Studioをインストールすると自動的に含まれます。

備考:
署名ツールがない環境の場合は、こちらのページからSDKをダウンロードし、signtoolを利用できるようにすること

② 署名コマンドは「Visual Studio 開発者コマンドプロンプト」または
「Visual Studio Developer PowerShell」から実行します。

VSC①.png

③ 今回はこちらのページを参考に、「Visual Studio Developer PowerShell」から署名コマンドを実行します。

VSC②.png

署名コマンドサンプル
signtool sign /v /a /n "staging.Globalsign K.K." /tr http://timestamp.globalsign.com/tsa/r6advanced1 /td sha256 /fd sha256 C:\Users\Administrator\source\repos\PythonApplication1\env\Scripts\dist/カラーアンケート.exe

 

④ トークンのパスワードを入力後、署名結果がコマンドラインに表示されます。
署名が成功したことがメッセージで表示されていることを確認しました。

VSC③.png

⑤ 署名されたファイルを確認してみます。

署名確認①.png

⑥ Digital Signatures(デジタル署名)から証明書が付与されていることを確認できます。
今回は署名時にタイムスタンプオプションも使用したため、Countersignatures(副署名)にタイムスタンプ証明書も付与されています。

署名確認②.png

2034/12/10まで検証が可能な状態のファイルとなったことを確認します。

署名確認③.png

まとめ

今回は、コードサイニング証明書の取得から設定、実際の署名方法までを詳しく解説しました。VSCで作成したファイルに対して、簡単にコード署名することができたと思います。

コードサイニング証明書を正しく導入することで、ソフトウェアの信頼性や安全性を高めることができます。特に、証明書の管理や署名時のアルゴリズム選択(SHA256以上推奨)は今後ますます重要になります。
本記事を参考に、正しい手順で証明書を導入し、安全な配布を実現してください。

トピック関連記事

#

2023年10月05日

Windows PCで証明書認証する場合のMicrosoft Entra CBAの設定方法

#

2013年08月02日

DNS-based Authentication of Named Entities(DANE)

#

2015年09月09日

モバイルデバイス管理(Mobile Device Management)とクライアント証明書~双方を連携させて生まれる相乗効果~

この記事を書きました

石井 昌伸

石井 昌伸
所属:GMOグローバルサイン テクニカルサポート部