ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える

ぶらっくとりーの
質問: 証明書認証の導入
ASP.NET WebアプリケーションからAzureのAPIを呼び出しています。現在はAzureでアプリケーション登録をして、シークレットを発行していますが、 シークレットの有効期限が最大720日になってしまっています。もっと有効期限を長くしたいです。 説明によると、本番環境では証明書認証を使ったほうが良いとの説明もあり、導入を検討したいです。どのようなセットアップをすればよいでしょうか?


ASP.NET Webアプリケーションで証明書認証を利用する手順を紹介します。

手順の流れ

手順は次の通りです。

  1. 証明書の作成 (アプリケーション実行サーバー)
  2. 証明書の登録 (Azure Portal)
  3. 証明書のアクセス許可 (アプリケーション実行サーバー)
  4. Webアプリケーションの設定 - 拇印の値の設定
  5. 動作確認

証明書の作成

初めにアプリケーションを実行するサーバーで証明書を作成します。
次のPowerShellスクリプトを作成します。

$cert = New-SelfSignedCertificate `
  -Subject "CN=(アプリのサーバーのFQDN), O=(組織の名前), C=JP" `
  -CertStoreLocation "Cert:\LocalMachine\My" `
  -KeyExportPolicy Exportable `
  -KeySpec Signature `
  -KeyLength 2048 `
  -KeyAlgorithm RSA `
  -HashAlgorithm SHA256 `
  -NotAfter (Get-Date).AddYears([年数])

# 拇印を控える (appsettings の CertificateThumbprint に設定)
$cert.Thumbprint

# 公開鍵のみを .cer にエクスポート (Entra にアップロードする)
Export-Certificate -Cert $cert -FilePath cert.cer


CN, O, C の記載内容は以下です。

X.509 識別名 (DN) の主な属性
属性 属性名 OID 定義 記入する値 制約
CN commonName 2.5.4.3 その対象が一般に知られている名前。証明書が識別する主体そのものを表す 主体の種類によります。サーバー証明書は FQDN、個人証明書は個人名、アプリケーション証明書はアプリケーション名 64 文字以内
O organizationName 2.5.4.10 組織の名前 組織名。パブリック CA が発行する (OV/EV 証明書では、登記された法人名であることが審査されます。) 64 文字以内
C countryName 2.5.4.6 国名 ISO 3166-1 alpha-2 の 2 文字の国コード。日本は <code>JP</code> 2文字

例 (create-cer.ps1)
$cert = New-SelfSignedCertificate `
  -Subject "CN=ipentec.com, O=iPentec, C=JP" `
  -CertStoreLocation "Cert:\LocalMachine\My" `
  -KeyExportPolicy Exportable `
  -KeySpec Signature `
  -KeyLength 2048 `
  -KeyAlgorithm RSA `
  -HashAlgorithm SHA256 `
  -NotAfter (Get-Date).AddYears(10)

# 拇印を控える (appsettings の CertificateThumbprint に設定)
$cert.Thumbprint

# 公開鍵のみを .cer にエクスポート (Entra にアップロードする)
Export-Certificate -Cert $cert -FilePath cert.cer


コマンドを実行すると、スクリプトを配置して実行したディレクトリにcert.cerファイルが作成されます。
ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える:画像1

証明書の登録

作成した証明書をAzureに登録します。
Azure Portalにアクセスし、アプリケーションの画面を表示します。 アプリケーションが登録されていない場合は、アプリケーションを登録します。登録手順はこちらの記事を参考にしてください。

ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える:画像2

左側のメニューの[証明書とシークレット]の項目をクリックします。下図の[証明書とシークレット]の画面が表示されます。
ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える:画像3

右側のエリアの[証明書]のタブをクリックします。下図の画面に切り替わります。[証明書のアップロード]のボタンをクリックします。
ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える:画像4

証明書のアップロードのダイアログが右側にスライド表示されます。先ほど作成した cerファイルを選択し、[説明]のテキストボックスにわかりやすい名称を設定して、[追加]ボタンをクリックして 証明書をアップロードします。
ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える:画像5

証明書がアップロードされると、右側のエリアにアップロードした証明書の項目が追加されます。
ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える:画像6

証明書のアップロードは以上で完了です。

証明書のアクセス許可

証明書にアクセス許可を設定します。
証明書を作成したマシンで "certlm.msc"をコマンドで実行するか、スタートメニューで[コンピューター証明書の管理]を起動します。

下図のウィンドウが表示されます。[証明書 - ローカル コンピューター] > [個人] > [証明書] のノードをたどると、 作成した証明書の情報が格納されています。これは先に作成したcert.crt 証明書の秘密鍵などの情報が格納されています。
ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える:画像7

証明書の項目を右クリックします。ポップアップメニューの[すべてのタスク]サブメニューの[秘密キーの管理]の項目をクリックします。
ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える:画像8

下図のprivate keys のアクセス許可のダイアログが表示されます。ここにアプリケーションプールからのアクセス許可を追加します。[追加]ボタンをクリックします。
ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える:画像9

[ユーザー または グループの選択]ダイアログが表示されます。ダイアログ下部の[選択するオブジェクト名を入力してください]のテキストボックスに以下のユーザー名を入力します。
"アプリケーションプール名"には、このサーバーで実行してAPIを呼び出しするASP.NETアプリケーションのアプリケーションプール名です。
[名前の確認]ボタンをクリックしてユーザー名が検出されることを確認して、[OK]ボタンをクリックします。

IIS AppPool\<アプリケーションプール名>

ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える:画像10

アプリケーションプールのユーザーが追加できました。[OK]ボタンをクリックしてダイアログを閉じます。
ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える:画像11

Webアプリケーションの実装

Webアプリケーションを実装または修正します。エージェントに対して以下の指示をします。

プロンプト:すでにシークレット認証に対応している場合
Webアプリケーション "xxx" は現在シークレットでAPI呼び出しを認証していますが、証明書の認証に変更したいです。修正をお願いします。
プロンプト:新規のアプリケーションの場合
Webアプリケーション "xxx" を実装してください。(実装仕様...)。APIの呼び出しは証明書の認証で実装します。

Webアプリケーションの設定

Webアプリケーションを設定します。シークレットを利用していた場合は、シークレット値を AppSettings.jsonに設定しましたが、証明書の認証の場合は、 証明書の拇印の値を appsettings.jsonに設定します。

値を appsettings.json の 拇印の値の設定項目(CertificateThumbprintなど)に入力します。

補足
証明書認証にした場合には、シークレットの値は不要になります。

拇印の値は以下の方法で確認できます。

コマンド

証明書を作成したマシンで次のコマンドで確認できます。
'*'とした場合すべての証明書の値が表示されるため、適切にフィルタしたパターンにしてください。

Get-ChildItem Cert:\LocalMachine\My |
  Where-Object { $_.Subject -like '*' } |
  Format-List Subject, Thumbprint, NotAfter, HasPrivateKey

certlm.msc

"certlm.msc"をコマンドで実行するか、スタートメニューで[コンピューター証明書の管理]を起動します。
[証明書 - ローカル コンピューター] > [個人] > [証明書] のノードをたどり作成した証明書の項目をダブルクリックすると、 証明書のダイアログが表示されます。[詳細]タブで証明書の値が表示され、[拇印]の項目で値を確認できます。

ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える:画像12

Auzre Portal

Azure Portalで証明書をアップロードした際に、拇印の値が画面に表示されます。
ASP.NET WebアプリケーションからのAPI呼び出しを証明書認証に変える:画像13

動作確認

サーバーに配置して実際にアプリケーションが動作するかを確認します。

AuthorPortraitAlt
著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
作成日: 2026-08-18