AWS CloudHSM で Microsoft SignTool を使用してファイルに署名する
暗号化やパブリックキー基盤 (PKI) では、デジタル署名は、データが信頼されたエンティティより送信されたことを確認することを目的として使用されます。署名は、データが送信中に改ざんされていないことも示します。署名とは、送信者のプライベートキーを使用して生成された暗号化ハッシュを指します。受信者は、ハッシュ署名を送信者のパブリックキーで復号することで、データの整合性を検証できます。また、送信者は、デジタル証明書を管理する責任があります。デジタル証明書は、送信者のプライベートキーの所有者を証明し、復号に必要なパブリックキーを受信者に渡します。送信者がプライベートキーを所有している限り、その署名を信頼することができます。AWS CloudHSM では、FIPS 140-2 レベル 3 で検証されたハードウェアを使用して、排他的なシングルテナントアクセスを持つこれらのキーを保護します。
Microsoft SignTool は、ファイルに対して署名、検証、タイムスタンプ付与を行うコマンドラインツールであり、多くの組織で使用されています。キーペアは、SignTool で必要になるまで、AWS CloudHSM を使用して安全に保存することができます。このように、データに署名するための自動化ワークフローを簡単に作成することができます。
以下のトピックでは、AWS CloudHSM で SignTool を使用する方法の概要を説明します。
ステップ 1: 前提条件の設定
AWS CloudHSM で Microsoft SignTool を使用するには、以下が必要です。
-
Windows オペレーティングシステムが実行されている Amazon EC2 クライアントインスタンス。
-
認証機関 (CA)。自己管理、またはサードパーティープロバイダーが作成したもの。
-
EC2 インスタンスと同じ仮想パブリッククラウド (VPC) 内のアクティブな AWS CloudHSM クラスター。クラスターには、少なくとも 1 つの HSM が存在している必要があります。
-
AWS CloudHSM クラスター内のキーを所有および管理するための Crypto User (CU)。
-
未署名のファイルまたは実行可能ファイル。
-
Microsoft Windows Software Development Kit (SDK)。
AWS CloudHSM と Windows SignTool を使用するための前提条件を設定するには
-
このガイドの「開始方法」セクションの指示に従って、Windows EC2 インスタンスと AWS CloudHSM クラスターを起動します。
-
独自の Windows Server CA をホスティングする場合は、「AWS CloudHSM を使用して Windows Server を認証機関として設定する」のステップ 1 および 2 を行います。それ以外の場合は、公的に信頼されたサードパーティーの CA をそのまま使用します。
-
次のバージョンの Microsoft Windows SDK を Windows EC2 インスタンスにダウンロードしてインストールします。
SignTool
実行可能ファイルは、デスクトップアプリケーションのインストール機能用の Windows SDK Signing Tool に含まれます。不要な場合は、他の機能をインストール対象から除外することができます。デフォルトのインストール場所は次のとおりです。C:\Program Files (x86)\Windows Kits\
<SDK version>
\bin\<version number>
\<CPU architecture>
\signtool.exe
これで、Microsoft Windows SDK、AWS CloudHSM クラスター、CA を使用して、デジタル署名用証明書を作成することができます。
ステップ 2: 署名用証明書を作成する
EC2 インスタンスに Windows SDK をダウンロードしたら、これを使用して証明書署名リクエスト (CSR) を生成することができます。CSR は、未署名の証明書であり、署名用に最終的に CA に渡されます。この例では、Windows SDK に含まれるcertreq
実行可能ファイルを使用して、CSR を生成します。
certreq
実行可能ファイルを使用して CSR を生成するには
-
Windows EC2 インスタンスに接続されていない場合は、接続します。詳細については、「Amazon EC2 ユーザーガイド」の「インスタンスに接続する」を参照してください。
-
以下の行に含まれる
request.inf
ファイルを作成します。Subject
情報をお客様の組織の情報に置き換えます。各パラメータの説明については、「Microsoft のドキュメント」を参照してください。 [Version] Signature= $Windows NT$ [NewRequest] Subject = "C=
<Country>
,CN=<www.website.com>
,O=<Organization>
,OU=<Organizational-Unit>
,L=<City>
,S=<State>
" RequestType=PKCS10 HashAlgorithm = SHA256 KeyAlgorithm = RSA KeyLength = 2048 ProviderName = Cavium Key Storage Provider KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE" MachineKeySet = True Exportable = False -
certreq.exe
を実行します。この例では、CSR をrequest.csr
として保存します。certreq.exe -new request.inf request.csr
内部的に、新しいキーペアが AWS CloudHSM クラスター上に生成され、そのペアのプライベートキーを使用して、CSR を作成します。
-
CA に CSR を送ります。Windows Server CA を使用している場合は、次のステップを行います。
-
次のコマンドを入力して、CA ツールを開きます。
certsrv.msc
-
新しいウィンドウで、CA サーバーの名前を右クリックします。[すべてのタスク]、[Submit new request (新しいリクエストの送信)] の順に選択します。
-
request.csr
の場所に移動し、[開く] を選択します。 -
サーバー CA メニューから、[保留中のリクエスト] フォルダを表示します。先ほど作成したリクエストを右クリックし、[すべてのタスク] で [問題] を選択します。
-
[Issued Certificates (発行済みの証明書)] フォルダ ([保留中のリクエスト] フォルダの上) に移動します。
-
[開く] を選択して証明書を表示し、[詳細] タブを選択します。
-
[Copy to File (ファイルにコピー)] を選択して、証明書のエクスポートウィザードを起動します。DER でエンコードされた X.509 ファイルを
signedCertificate.cer
として安全な場所に保存します。 -
CA ツールを終了し、次のコマンドを使用して、証明書ファイルを Windows の Personal Certificate Store に移動します。他のアプリケーションで使用できます。
certreq.exe -accept signedCertificate.cer
-
これで、インポートしたファイルを使用して、ファイルに署名する ことができます。
ステップ 3: ファイルに署名する
これで、SignTool と、インポートした証明書を使用して、サンプルファイルに署名することができます。そのためには、証明書の SHA-1 ハッシュ、またはサムプリントを把握しておく必要があります。サムプリントを使用することで、AWS CloudHSM によって検証された証明書のみ SignTool で使用されるようできます。この例では、PowerShell を使用して証明書のハッシュを取得します。また、CA の GUI または Windows SDK の certutil
実行可能ファイルを使用することもできます。
証明書のサムプリントを取得し、それを使用してファイルに署名するには
-
管理者として PowerShell を開き、次のコマンドを実行します。
Get-ChildItem -path cert:\LocalMachine\My
返った
Thumbprint
をコピーします。 -
SignTool.exe
がある PowerShell 内のディレクトリに移動します。デフォルトの場所はC:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64
です。 -
最後に、次のコマンドを実行してファイルに署名します。コマンドが正常に実行されると、PowerShell より成功のメッセージが返ります。
signtool.exe sign /v /fd sha256 /sha1
<thumbprint>
/sm C:\Users\Administrator\Desktop\<test>
.ps1 -
(オプション) ファイルの署名を検証するには、次のコマンドを使用します。
signtool.exe verify /v /pa C:\Users\Administrator\Desktop\
<test>
.ps1