自己署名公開証明書を作成してアプリケーションを認証する

Microsoft Entra ID では、サービス プリンシパル用に、パスワードベースの認証 (アプリ シークレット) と証明書ベースの認証という 2 種類の認証がサポートされています。 アプリ シークレットは Azure portal や、 Microsoft Graph のような Microsoft API を使用して簡単に作成できますが、有効期間が長く、証明書ほど安全ではありません。 そのため、アプリケーションではシークレットではなく証明書を使用することをお勧めします。

テストでは、証明機関 (CA) で署名された証明書ではなく、自己署名公開証明書を使用できます。 この記事では、PowerShell を使って自己署名証明書を作成し、エクスポートします。

注意事項

自己署名証明書は、信頼できるサード パーティの CA によって署名されていないデジタル証明書です。 自己署名証明書は、Web サイトまたはソフトウェアの署名を担当する企業または開発者によって作成、発行、署名されます。 このため、自己署名証明書は、公開 Web サイトやアプリケーションでは安全でないと見なされます。

PowerShell を使用して証明書を作成する際には、暗号化アルゴリズムやハッシュ アルゴリズム、証明書の有効期間、ドメイン名などのパラメーターを指定できます。 その後、秘密キーを含めるかどうかをアプリケーションのニーズに応じて選択したうえで、証明書をエクスポートできます。

認証セッションを開始するアプリケーションでは秘密キーが必要ですが、認証を確認するアプリケーションでは公開キーが必要です。 そのため、PowerShell デスクトップ アプリから Microsoft Entra ID に対して認証を行っている場合は、公開キー (.cer ファイル) のみをエクスポートして Azure portal にアップロードします。 PowerShell アプリではローカル証明書ストアの秘密キーを使用して認証を開始し、Microsoft Graph のような Microsoft API を呼び出すためのアクセス トークンを取得します。

アプリケーションが、Azure Automation などの別のマシンから実行されている場合もあります。 このシナリオでは、公開キーと秘密キーのペアをローカル証明書ストアからエクスポートして、公開キーは Azure portal に、秘密キー (.pfx ファイル) は Azure Automation にアップロードします。 Azure Automation で実行されているアプリケーションでは、秘密キーを使用して認証を開始し、Microsoft Graph のような Microsoft API を呼び出すためのアクセス トークンを取得します。

この記事では、New-SelfSignedCertificate PowerShell コマンドレットを使用して自己署名証明書を作成し、Export-Certificate コマンドレットを使用して、簡単にアクセスできる場所にエクスポートします。 これらのコマンドレットは、最新バージョンの Windows (Windows 8.1 以降、および Windows Server 2012R2 以降) に組み込まれています。 自己署名証明書には、以下の構成があります。

  • 2,048 ビットのキー長。 より長い値がサポートされていますが、セキュリティとパフォーマンスの組み合わせが最適な 2,048 ビットのサイズを強くお勧めします。
  • RSA 暗号アルゴリズムを使用します。 Microsoft Entra ID では現在、RSA のみがサポートされています。
  • 証明書は、SHA256 ハッシュ アルゴリズムで署名されています。 Microsoft Entra ID では、SHA384 および SHA512 ハッシュ アルゴリズムで署名された証明書もサポートされています。
  • 証明書は 1 年間のみ有効です。
  • 証明書は、クライアントとサーバーの両方の認証で使用できるようにサポートされています。

証明書の開始日と有効期限、およびその他のプロパティをカスタマイズするには、「New-SelfSignedCertificate」を参照してください。

公開証明書を作成してエクスポートする

この方法を使用して作成した証明書を使用して、自分のマシンで実行されているアプリケーションから認証を行います。 たとえば、PowerShell から認証します。

PowerShell プロンプトで次のコマンドを実行し、PowerShell コンソール セッションを開いたままにします。 {certificateName} を、証明書に付ける名前に置き換えます。

$certname = "{certificateName}"    ## Replace {certificateName}
$cert = New-SelfSignedCertificate -Subject "CN=$certname" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256

前のコマンドの $cert 変数には現在のセッションの証明書が格納されるため、それをエクスポートできます。

次のコマンドでは、証明書を .cer 形式でエクスポートします。 また、.pem.crt など、Azure portal でサポートされている他の形式でエクスポートすることもできます。


Export-Certificate -Cert $cert -FilePath "C:\Users\admin\Desktop\$certname.cer"   ## Specify your preferred location

これで、証明書を Azure portal にアップロードする準備ができました。 アップロードが完了したら、アプリケーションの認証に使用する証明書の拇印を取得します。

(オプション): 秘密キーがある公開証明書をエクスポートする

アプリケーションが別のコンピューターやクラウド (Azure Automation など) から実行される場合は、秘密キーも必要になります。

前のコマンドに続いて、証明書の秘密キーのパスワードを作成し、変数に保存します。 {myPassword} を、証明書の秘密キーを保護するために使用するパスワードに置き換えてください。


$mypwd = ConvertTo-SecureString -String "{myPassword}" -Force -AsPlainText  ## Replace {myPassword}

$mypwd 変数に格納したパスワードを使用して、秘密キーを保護し、エクスポートします。次のコマンドを使用します。


Export-PfxCertificate -Cert $cert -FilePath "C:\Users\admin\Desktop\$certname.pfx" -Password $mypwd   ## Specify your preferred location

これで、証明書 (.cer ファイル) を Azure portal にアップロードする準備ができました。 秘密キー (.pfx ファイル) は暗号化され、他の関係者からは読み取ることができません。 アップロードが完了したら、証明書の拇印を取得します。これは、アプリケーションの認証に使用できます。

省略可能なタスク: キーストアから証明書を削除する。

次のコマンドを実行して証明書の拇印を取得することで、個人用ストアからキー ペアを削除できます。


Get-ChildItem -Path "Cert:\CurrentUser\My" | Where-Object {$_.Subject -Match "$certname"} | Select-Object Thumbprint, FriendlyName

次に、表示されている拇印をコピーし、それを使用して証明書とその秘密キーを削除します。


Remove-Item -Path Cert:\CurrentUser\My\{pasteTheCertificateThumbprintHere} -DeleteKey

証明書の有効期限を確認する

上の手順に従って作成した自己署名証明書には、有効期限があります。 Azure portal の [アプリの登録] セクションで、[証明書とシークレット] 画面に証明書の有効期限が表示されます。 Azure Automation を使用している場合は、Automation アカウントの [証明書] 画面に証明書の有効期限が表示されます。 前の手順に従って、新しい自己署名証明書を作成します。

次のステップ

Microsoft Entra ID でのフェデレーション シングル サインオンの証明書の管理