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 サービス API などの側面をユーザーから抽象化します。

SCEP 管理ソリューション

サード パーティ証明機関 SCEP と Microsoft Intune の統合方法

管理者は 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 でのソリューションとプロジェクトの作成に関する知識が必要です。

  1. リポジトリから通知を受け取るために登録する

  2. リポジトリを複製またはダウンロードする

  3. \src\CsrValidation フォルダーで必要なライブラリの実装に移動します (https://github.com/Microsoft/Intune-Resource-Access/tree/develop/src/CsrValidation)

  4. README ファイルの手順を使用してライブラリをビルドする

  5. SCEP サーバーをビルドするプロジェクトにライブラリを含める

  6. SCEP サーバーで次のタスクを実行します。

    • 管理者が、ライブラリが認証に使用する Azure アプリケーション識別子、Azure アプリケーション キー、テナント ID (この記事では) を構成できるようにします。 管理者は、Azure アプリケーション キーの更新を許可する必要があります。
    • Intune で生成された SCEP パスワードを含む SCEP 要求を特定する
    • 要求 API ライブラリの 検証 を使用して、Intune で生成された SCEP パスワードを検証する
    • ライブラリ通知 API を使用して、Intune で生成された SCEP パスワードを持つ SCEP 要求に対して発行された証明書について Intune に通知します。 また、これらの SCEP 要求を処理するときに発生する可能性があるエラーについても Intune に通知します。
    • 管理者が問題のトラブルシューティングを行うのに役立つ十分な情報をサーバーがログに記録することを確認する
  7. 統合テストを完了し (この記事で)、問題に対処する

  8. 以下を説明する書面によるガイダンスをお客様に提供します。

    • 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 と適切に統合されていることを検証してテストすることは必須です。 手順の概要を次に示します。

  1. Intune 試用版アカウントを設定します。
  2. Azure portal で SCEP サーバーをオンボードします (この記事)。
  3. SCEP サーバーの オンボード時に作成された ID とキーを使用して SCEP サーバーを構成します。
  4. シナリオ テスト マトリックスでシナリオをテストするためにデバイスを登録 します
  5. テスト証明機関の信頼されたルート証明書プロファイルを作成します。
  6. SCEP プロファイルを作成して、シナリオ テスト マトリックスに記載されている シナリオをテストします
  7. デバイスを登録したユーザーにプロファイルを割り当てます
  8. デバイスが Intune と同期されるまで待ちます。 または、 デバイスを手動で同期します
  9. 信頼されたルート証明書と SCEP プロファイルがデバイスに展開されていることを確認します
  10. 信頼されたルート証明書がすべてのデバイスにインストールされていることを確認します。
  11. 割り当てられたプロファイルの SCEP 証明書がすべてのデバイスにインストールされていることを確認します。
  12. インストールされている証明書のプロパティが、SCEP プロファイルに設定されているプロパティと一致することを確認します。
  13. 発行された証明書が Intune 管理センターに正しく表示されていることを確認する

関連項目