「自身で作ったアプリを配布して実行できるようにしたい。」そんなときに避けて通れないのがコード署名(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トークンにインストールする方法』を参考に、証明書申請用のパネルにログインし、「証明書発行」を選択します。
② サービス選択からコードサイニング証明書を選択し、次へ進みます。
③ 鍵生成オプションでは、お問い合わせの多い「Fortify」を選択します。
④ 証明書の情報を入力し、申請を進めていきます。
⑤ 申請が完了しました。
⑥ 申請完了後、受信確認メールが送信されるので、対応します。
メールタイトル:
グローバルサイン /受信確認手続きのお願い:OS2025●●●●●●●●●
⑦ 受信確認に対応し、審査対応完了後証明書取得用メールを受信します。
メールタイトル:
[グローバルサイン]電子証明書取得のお願い/OS2025●●●●●●●●●: コモンネーム
⑧ USBトークンを端末に識別させるため、ドライバをインストールします。弊社サポートページ『Windows用USBトークンドライバのインストール方法』をご参照ください。
ポイント:ドライバはUSBトークンや、Windowsとの最適な組み合わせがあるため、適宜verを合わせること
⑨ 環境を確認し、最新版のドライバ10.8 R9をインストールします。
ポイント:インストールの過程でドライバーのインストールタイプを確認されるが、
デフォルトの「typical」で問題ないです。
⑩ドライバーのインストールが完了しました。
⑪ドライバーをインストールしたことにより、USBトークンが端末に識別されるようになりました。
ポイント:マイトークンと表示されればOK
⑫ 続いて、鍵生成オプションでFortifyを選択したため、Fortifyのダウンロードに進みます。
ポイント:基本的には弊社サポートページ通りに進むこと。
インストールオプションはデフォルトで問題ありません。
⑬ インストール完了後、タスクメニューからFortifyが確認可能となります。
ポイント:Windowsのタスクバーのtoolメニューから開いたFortifyの画面
ここでもsafenet eToke5110ccが識別されていることを確認しておくのが無難
⑭ 証明書取得用URLから取得作業を進めます。申請時に入力した証明書取得用PWを入力します。
⑮ 利用約款に承諾します。
⑯ Fortifyが起動し、証明書の内容確認画面が表示されます。問題がなければ「作成」を押してください。
⑰Fortifyが起動し、トークンへのアクセスが求められます。
⑱トークンのパスワードを入力後、ブラウザ上で鍵生成が始まります。
ポイント:鍵生成に時間がかかるケースもありますが、何も操作はせず、待機すること
⑲ 鍵生成が完了すると、以下の画面の表示となります。「実行」ボタンを押して証明書のインストールを行います。
⑳ 証明書がトークンに格納されました。
㉑トークン内で証明書のチェーンが組めるよう、ルート証明書・中間CA証明書をインポートします。
トークンのパスワードを入力し、次へ進みます。
CA証明書という項目が設けられ、証明書が格納されました。
署名対象のファイルの作成まで
① VSC上で署名を行うEXEファイルを作成します。今回はVisual StudioでPythonの簡単なアンケート実行ファイルを作成します。
② 実行ファイルをクリックすると好きな色を聞いてくる実行ファイル【カラーアンケート.exe】を作成しました。
③ デジタル署名は付与されていないことも確認します。
実際の署名から検証まで
① 今回はvisual Studioがある環境なので、signtoolも既存のものそのまま利用します。
※signtool.exeはVisual Studioをインストールすると自動的に含まれます。
備考:
署名ツールがない環境の場合は、こちらのページからSDKをダウンロードし、signtoolを利用できるようにすること
② 署名コマンドは「Visual Studio 開発者コマンドプロンプト」または
「Visual Studio Developer PowerShell」から実行します。
③ 今回はこちらのページを参考に、「Visual Studio Developer PowerShell」から署名コマンドを実行します。
署名コマンドサンプル
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
④ トークンのパスワードを入力後、署名結果がコマンドラインに表示されます。
署名が成功したことがメッセージで表示されていることを確認しました。
⑤ 署名されたファイルを確認してみます。
⑥ Digital Signatures(デジタル署名)から証明書が付与されていることを確認できます。
今回は署名時にタイムスタンプオプションも使用したため、Countersignatures(副署名)にタイムスタンプ証明書も付与されています。
2034/12/10まで検証が可能な状態のファイルとなったことを確認します。
まとめ
今回は、コードサイニング証明書の取得から設定、実際の署名方法までを詳しく解説しました。VSCで作成したファイルに対して、簡単にコード署名することができたと思います。
コードサイニング証明書を正しく導入することで、ソフトウェアの信頼性や安全性を高めることができます。特に、証明書の管理や署名時のアルゴリズム選択(SHA256以上推奨)は今後ますます重要になります。
本記事を参考に、正しい手順で証明書を導入し、安全な配布を実現してください。


