ASP.NET Webアプリケーションで証明書認証を利用する手順を紹介します。
手順は次の通りです。
初めにアプリケーションを実行するサーバーで証明書を作成します。
次の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 の記載内容は以下です。
| 属性 | 属性名 | 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文字 |
$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ファイルが作成されます。
作成した証明書をAzureに登録します。
Azure Portalにアクセスし、アプリケーションの画面を表示します。
アプリケーションが登録されていない場合は、アプリケーションを登録します。登録手順はこちらの記事を参考にしてください。
左側のメニューの[証明書とシークレット]の項目をクリックします。下図の[証明書とシークレット]の画面が表示されます。
右側のエリアの[証明書]のタブをクリックします。下図の画面に切り替わります。[証明書のアップロード]のボタンをクリックします。
証明書のアップロードのダイアログが右側にスライド表示されます。先ほど作成した cerファイルを選択し、[説明]のテキストボックスにわかりやすい名称を設定して、[追加]ボタンをクリックして
証明書をアップロードします。
証明書がアップロードされると、右側のエリアにアップロードした証明書の項目が追加されます。
証明書のアップロードは以上で完了です。
証明書にアクセス許可を設定します。
証明書を作成したマシンで "certlm.msc"をコマンドで実行するか、スタートメニューで[コンピューター証明書の管理]を起動します。
下図のウィンドウが表示されます。[証明書 - ローカル コンピューター] > [個人] > [証明書] のノードをたどると、
作成した証明書の情報が格納されています。これは先に作成したcert.crt 証明書の秘密鍵などの情報が格納されています。
証明書の項目を右クリックします。ポップアップメニューの[すべてのタスク]サブメニューの[秘密キーの管理]の項目をクリックします。
下図のprivate keys のアクセス許可のダイアログが表示されます。ここにアプリケーションプールからのアクセス許可を追加します。[追加]ボタンをクリックします。
[ユーザー または グループの選択]ダイアログが表示されます。ダイアログ下部の[選択するオブジェクト名を入力してください]のテキストボックスに以下のユーザー名を入力します。
"アプリケーションプール名"には、このサーバーで実行してAPIを呼び出しするASP.NETアプリケーションのアプリケーションプール名です。
[名前の確認]ボタンをクリックしてユーザー名が検出されることを確認して、[OK]ボタンをクリックします。
IIS AppPool\<アプリケーションプール名>
アプリケーションプールのユーザーが追加できました。[OK]ボタンをクリックしてダイアログを閉じます。
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"をコマンドで実行するか、スタートメニューで[コンピューター証明書の管理]を起動します。
[証明書 - ローカル コンピューター] > [個人] > [証明書] のノードをたどり作成した証明書の項目をダブルクリックすると、
証明書のダイアログが表示されます。[詳細]タブで証明書の値が表示され、[拇印]の項目で値を確認できます。
Azure Portalで証明書をアップロードした際に、拇印の値が画面に表示されます。
サーバーに配置して実際にアプリケーションが動作するかを確認します。