API を使用して SCEP 用のサード パーティ製 CA をIntuneに追加する
Microsoft Intuneでは、サード パーティの証明機関 (CA) を追加し、これらの CA を発行し、簡易証明書登録プロトコル (SCEP) を使用して証明書を検証できます。 サード パーティの証明機関を追加すると、この機能の概要が示され、Intuneの管理者タスクについて説明します。
また、Microsoft が GitHub.com で公開したオープンソース ライブラリを使用する開発者タスクもあります。 ライブラリには、次の API が含まれています。
- Intuneによって動的に生成された SCEP パスワードを検証します
- SCEP 要求を送信するデバイスで作成された証明書をIntuneに通知します
この API を使用すると、サード パーティの SCEP サーバーが MDM デバイス用のIntune SCEP 管理ソリューションと統合されます。 ライブラリは、認証、サービスの場所、ODATA Intune Service API などの側面をユーザーから抽象化します。
SCEP 管理ソリューション
管理者は、Intuneを使用して SCEP プロファイルを作成し、これらのプロファイルを MDM デバイスに割り当てます。 SCEP プロファイルには、次のようなパラメーターが含まれます。
- SCEP サーバーの URL
- 証明機関の信頼されたルート証明書
- 証明書属性など
Intuneでチェックするデバイスには、SCEP プロファイルが割り当てられ、これらのパラメーターで構成されます。 動的に生成された SCEP チャレンジ パスワードは、Intuneによって作成され、デバイスに割り当てられます。
この課題には次のものが含まれます。
- 動的に生成されたチャレンジ パスワード
- デバイスが SCEP サーバーに発行する証明書署名要求 (CSR) で予期されるパラメーターの詳細
- チャレンジの有効期限
Intuneは、この情報を暗号化し、暗号化された BLOB に署名し、これらの詳細を SCEP チャレンジ パスワードにパッケージ化します。
SCEP サーバーに接続して証明書を要求し、この SCEP チャレンジ パスワードを付与するデバイス。 SCEP サーバーは、CSR と暗号化された SCEP チャレンジ パスワードを検証のためにIntuneに送信します。 このチャレンジ パスワードと CSR は、SCEP サーバーがデバイスに証明書を発行するための検証に合格する必要があります。 SCEP チャレンジが検証されると、次のチェックが行われます。
- 暗号化された BLOB の署名を検証します
- チャレンジの有効期限が切れていないことを検証します
- プロファイルがまだデバイスを対象としていることを検証します
- CSR 内のデバイスによって要求された証明書のプロパティが、想定される値と一致することを検証します
SCEP 管理ソリューションには、レポートも含まれています。 管理者は、SCEP プロファイルの展開状態と、デバイスに発行された証明書に関する情報を取得できます。
Intuneとの統合
Intune SCEP と統合するライブラリのコードは、Microsoft/Intune-Resource-Access GitHub リポジトリでダウンロードできます。
ライブラリを製品に統合するには、次の手順を実行します。 これらの手順では、GitHub リポジトリの操作と、Visual Studio でのソリューションとプロジェクトの作成に関する知識が必要です。
リポジトリから通知を受け取るために登録する
リポジトリを複製またはダウンロードする
\src\CsrValidation
フォルダーで必要なライブラリの実装に移動します (https://github.com/Microsoft/Intune-Resource-Access/tree/develop/src/CsrValidation)README ファイルの手順を使用してライブラリをビルドする
SCEP サーバーをビルドするプロジェクトにライブラリを含める
SCEP サーバーで次のタスクを実行します。
- 管理者が、ライブラリが認証に使用するAzure アプリケーション識別子、Azure アプリケーション キー、テナント ID (この記事では) を構成できるようにします。 管理者は、Azure アプリケーション キーの更新を許可する必要があります。
- Intune生成された SCEP パスワードを含む SCEP 要求を特定する
- Validate Request API ライブラリを使用して、Intune生成された SCEP パスワードを検証する
- ライブラリ通知 API を使用して、Intune生成された SCEP パスワードを持つ SCEP 要求に対して発行された証明書についてIntuneに通知します。 また、これらの SCEP 要求を処理するときに発生する可能性があるエラーについてもIntuneに通知します。
- 管理者が問題のトラブルシューティングを行うのに役立つ十分な情報をサーバーがログに記録することを確認する
統合テストを完了し (この記事で)、問題に対処する
以下を説明する書面によるガイダンスをお客様に提供します。
- Microsoft Intune管理センターで SCEP サーバーをオンボードする必要がある方法
- ライブラリを構成するために必要なAzure アプリケーション識別子とAzure アプリケーション キーを取得する方法
Azure での SCEP サーバーのオンボード
Intuneに対する認証を行うには、SCEP サーバーにAzure アプリケーション ID、Azure アプリケーション キー、テナント ID が必要です。 また、SCEP サーバーは、Intune API にアクセスする権限も必要です。
このデータを取得するには、SCEP サーバー管理者がAzure portalにサインインし、アプリケーションを登録し、Microsoft Intune API\SCEP チャレンジ検証アクセス許可と Application.Read.All アクセス許可の両方をアプリケーションに付与し、アプリケーションのキーを作成し、アプリケーション ID、そのキー、テナント ID をダウンロードします。
アプリケーションの登録と ID とキーの取得に関するガイダンスについては、「ポータルを使用してリソースにアクセスするためのMicrosoft Entra アプリケーションとサービス プリンシパルを作成する」を参照してください。
Java ライブラリ API
Java ライブラリは、ビルド時にその依存関係をプルする Maven プロジェクトとして実装されます。 API は、IntuneScepServiceClient
クラスによって com.microsoft.intune.scepvalidation
名前空間の下に実装されます。
IntuneScepServiceClient クラス
IntuneScepServiceClient
クラスには、SCEP サービスが SCEP パスワードを検証し、作成された証明書についてIntuneに通知し、エラーを一覧表示するために使用されるメソッドが含まれています。
IntuneScepServiceClient コンストラクター
署名:
IntuneScepServiceClient(
Properties configProperties)
説明:
IntuneScepServiceClient
オブジェクトをインスタンス化して構成します。
パラメーター:
- configProperties - クライアント構成情報を含む Properties オブジェクト
構成には、次のプロパティが含まれている必要があります。
- AAD_APP_ID="オンボード プロセス中に取得されたAzure アプリケーション ID"
- AAD_APP_KEY="オンボード プロセス中に取得されたAzure アプリケーション キー"
- TENANT="オンボード プロセス中に取得されたテナント ID"
- PROVIDER_NAME_AND_VERSION="製品とそのバージョンを識別するために使用される情報"
ソリューションで認証または認証なしのプロキシが必要な場合は、次のプロパティを追加できます。
- PROXY_HOST="プロキシがホストされているホスト"
- PROXY_PORT="プロキシがリッスンしているポート"
- PROXY_USER="プロキシが基本認証を使用する場合に使用するユーザー名"
- PROXY_PASS="プロキシが基本認証を使用する場合に使用するパスワード"
スロー:
- IllegalArgumentException - コンストラクターが適切なプロパティ オブジェクトなしで実行された場合にスローされます。
重要
このクラスのインスタンスをインスタンス化し、それを使用して複数の SCEP 要求を処理することをお勧めします。 これにより、認証トークンとサービスの場所情報がキャッシュされるため、オーバーヘッドが削減されます。
セキュリティに関する注意事項
SCEP サーバーの実装者は、ストレージに永続化された構成プロパティに入力されたデータを改ざんや漏洩から保護する必要があります。 適切な ACL と暗号化を使用して情報をセキュリティで保護することをお勧めします。
ValidateRequest メソッド
署名:
void ValidateRequest(
String transactionId,
String certificateRequest)
説明:
SCEP 証明書要求を検証します。
パラメーター:
- transactionId - SCEP トランザクション ID
- certificateRequest - DER でエンコードされた PKCS #10 文字列としてエンコードされた証明書要求 Base64
スロー:
- IllegalArgumentException - 無効なパラメーターを指定して呼び出された場合にスローされます
- IntuneScepServiceException - 証明書要求が無効であることが判明した場合にスローされます
- 例外 - 予期しないエラーが発生した場合にスローされます
重要
このメソッドによってスローされる例外は、サーバーによってログに記録される必要があります。
IntuneScepServiceException
プロパティには、証明書要求の検証に失敗した理由に関する詳細情報があることに注意してください。
セキュリティに関する注意事項:
- このメソッドが例外をスローする場合、SCEP サーバーはクライアントに証明書を発行 しないでください 。
- SCEP 証明書要求の検証エラーは、Intune インフラストラクチャの問題を示している可能性があります。 または、攻撃者が証明書を取得しようとしていることを示している可能性があります。
SendSuccessNotification メソッド
署名:
void SendSuccessNotification(
String transactionId,
String certificateRequest,
String certThumbprint,
String certSerialNumber,
String certExpirationDate,
String certIssuingAuthority)
説明:
SCEP 要求の処理の一部として証明書が作成されることをIntuneに通知します。
パラメーター:
- transactionId - SCEP トランザクション ID
- certificateRequest - DER でエンコードされた PKCS #10 文字列としてエンコードされた証明書要求 Base64
- certThumprint - プロビジョニングされた証明書の拇印の SHA1 ハッシュ
- certSerialNumber - プロビジョニングされた証明書のシリアル番号
- certExpirationDate - プロビジョニングされた証明書の有効期限。 日付時刻文字列は、WEB UTC 時刻 (YYYY-MM-DDThh:mm:ss.sssTZD) ISO 8601 として書式設定する必要があります。
- certIssuingAuthority - 証明書を発行した機関の名前
スロー:
- IllegalArgumentException - 無効なパラメーターを指定して呼び出された場合にスローされます
- IntuneScepServiceException - 証明書要求が無効であることが判明した場合にスローされます
- 例外 - 予期しないエラーが発生した場合にスローされます
重要
このメソッドによってスローされる例外は、サーバーによってログに記録される必要があります。
IntuneScepServiceException
プロパティには、証明書要求の検証に失敗した理由に関する詳細情報があることに注意してください。
セキュリティに関する注意事項:
- このメソッドが例外をスローする場合、SCEP サーバーはクライアントに証明書を発行 しないでください 。
- SCEP 証明書要求の検証エラーは、Intune インフラストラクチャの問題を示している可能性があります。 または、攻撃者が証明書を取得しようとしていることを示している可能性があります。
SendFailureNotification メソッド
署名:
void SendFailureNotification(
String transactionId,
String certificateRequest,
long hResult,
String errorDescription)
説明:
SCEP 要求の処理中にエラーが発生したことをIntuneに通知します。 このクラスのメソッドによってスローされる例外に対して、このメソッドを呼び出さないでください。
パラメーター:
- transactionId - SCEP トランザクション ID
- certificateRequest - DER でエンコードされた PKCS #10 文字列としてエンコードされた証明書要求 Base64
- hResult - 発生したエラーを最もよく表す Win32 エラー コード。 「Win32 エラー コード」を参照してください
- errorDescription - 発生したエラーの説明
スロー:
- IllegalArgumentException - 無効なパラメーターを指定して呼び出された場合にスローされます
- IntuneScepServiceException - 証明書要求が無効であることが判明した場合にスローされます
- 例外 - 予期しないエラーが発生した場合にスローされます
重要
このメソッドによってスローされる例外は、サーバーによってログに記録される必要があります。
IntuneScepServiceException
プロパティには、証明書要求の検証に失敗した理由に関する詳細情報があることに注意してください。
セキュリティに関する注意事項:
- このメソッドが例外をスローする場合、SCEP サーバーはクライアントに証明書を発行 しないでください 。
- SCEP 証明書要求の検証エラーは、Intune インフラストラクチャの問題を示している可能性があります。 または、攻撃者が証明書を取得しようとしていることを示している可能性があります。
SetSslSocketFactory メソッド
署名:
void SetSslSocketFactory(
SSLSocketFactory factory)
説明:
このメソッドを使用して、Intuneと通信するときに、指定した SSL ソケット ファクトリ (既定値ではなく) を使用する必要があることをクライアントに通知します。
パラメーター:
- factory - クライアントが HTTPS 要求に使用する必要がある SSL ソケット ファクトリ
スロー:
- IllegalArgumentException - 無効なパラメーターを指定して呼び出された場合にスローされます
注:
このクラスの他のメソッドを実行する前に、必要に応じて SSL ソケット ファクトリを設定する必要があります。
統合テスト
ソリューションがIntuneと適切に統合されていることを検証してテストすることは必須です。 手順の概要を次に示します。
- Intune試用版アカウントを設定します。
- Azure portalで SCEP サーバーをオンボードします (この記事で)。
- SCEP サーバーの オンボード時に作成された ID とキーを使用して SCEP サーバーを構成します。
- シナリオ テスト マトリックスでシナリオをテストするためにデバイスを登録 します。
- テスト証明機関の信頼されたルート証明書プロファイルを作成します。
- SCEP プロファイルを作成して、シナリオ テスト マトリックスに記載されている シナリオをテストします。
- デバイスを登録したユーザーにプロファイルを割り当てます。
- デバイスがIntuneと同期するまで待ちます。 または、 デバイスを手動で同期します。
- 信頼されたルート証明書と SCEP プロファイルがデバイスに展開されていることを確認します。
- 信頼されたルート証明書がすべてのデバイスにインストールされていることを確認します。
- 割り当てられたプロファイルの SCEP 証明書がすべてのデバイスにインストールされていることを確認します。
- インストールされている証明書のプロパティが、SCEP プロファイルに設定されているプロパティと一致することを確認します。
- 発行された証明書がIntune管理センターに正しく表示されていることを確認する
関連項目
- サード パーティ CA の追加の概要
- セットアップ Intune
- デバイスの登録
- SCEP 証明書プロファイルを構成する (このシナリオでは Microsoft NDES Server\Connector セットアップは使用されません)