使用 API 將 SCEP 的協力廠商 CA 新增至 Intune

在Microsoft Intune中,您可以將協力廠商憑證授權單位單位新增至 CA) (,並使用簡單憑證註冊通訊協定 (SCEP) 來發出這些 CA 並驗證憑證。 新增協力廠商憑證授權單位單位 提供這項功能的概觀,並說明 Intune 中的系統管理員工作。

另外還有一些開發人員工作會使用 Microsoft 在 GitHub.com 中發佈的開放原始碼程式庫。 程式庫包含下列 API:

  • 驗證 Intune 動態產生的 SCEP 密碼
  • 通知 Intune 在提交 SCEP 要求的裝置上建立的憑證

使用此 API 時,您的協力廠商 SCEP 伺服器會與適用于 MDM 裝置的 Intune SCEP 管理解決方案整合。 程式庫會從其使用者擷取驗證、服務位置和 ODATA Intune 服務 API 等層面。

SCEP 管理解決方案

協力廠商憑證授權單位單位 SCEP 如何與Microsoft Intune

系統管理員會使用 Intune 建立 SCEP 設定檔,然後將這些設定檔指派給 MDM 裝置。 SCEP 設定檔包含參數,例如:

  • SCEP 伺服器的 URL
  • 憑證授權單位單位的受信任根憑證
  • 憑證屬性等等

使用 Intune 簽入的裝置會獲指派 SCEP 設定檔,並使用這些參數進行設定。 Intune 會建立動態產生的 SCEP 挑戰密碼,然後指派給裝置。

此挑戰包含:

  • 動態產生的挑戰密碼
  • 憑證簽署要求中預期的參數詳細資料 (CSR) 裝置簽發給 SCEP 伺服器
  • 挑戰到期時間

Intune 會加密這項資訊、簽署加密的 Blob,然後將這些詳細資料封裝到 SCEP 挑戰密碼中。

連絡 SCEP 伺服器以要求憑證,然後提供此 SCEP 挑戰密碼的裝置。 SCEP 伺服器會將 CSR 和加密的 SCEP 挑戰密碼傳送至 Intune 進行驗證。 此挑戰密碼和 CSR 必須通過驗證,SCEP 伺服器才能將憑證簽發給裝置。 驗證 SCEP 挑戰時,會進行下列檢查:

  • 驗證加密 Blob 的簽章
  • 驗證挑戰尚未過期
  • 驗證設定檔仍以裝置為目標
  • 驗證裝置在 CSR 中要求的憑證屬性是否符合預期的值

SCEP 管理解決方案也包含報告。 系統管理員可以取得 SCEP 設定檔部署狀態的相關資訊,以及核發給裝置之憑證的相關資訊。

與 Intune 整合

您可以在 Microsoft/Intune-Resource-Access GitHub 存放庫中下載程式庫與 Intune SCEP 整合的程式碼。

將程式庫整合到您的產品中包含下列步驟。 這些步驟需要瞭解如何使用 GitHub 存放庫,以及在 Visual Studio 中建立方案和專案。

  1. 註冊以接收來自存放庫的通知

  2. 複製或下載存放庫

  3. 移至資料夾下 \src\CsrValidation 所需的程式庫實作 (https://github.com/Microsoft/Intune-Resource-Access/tree/develop/src/CsrValidation)

  4. 使用讀我檔案中的指示建置程式庫

  5. 在建置 SCEP 伺服器的專案中包含程式庫

  6. 在 SCEP 伺服器上完成下列工作:

    • 允許系統管理員設定本文中Azure 應用程式識別碼、Azure 應用程式金鑰和租使用者標識符 (,) 程式庫用於驗證。 應允許系統管理員更新Azure 應用程式金鑰。
    • 識別包含 Intune 產生的 SCEP 密碼的 SCEP 要求
    • 使用 驗證要求 API 程式庫來驗證 Intune 產生的 SCEP 密碼
    • 使用程式庫通知 API 來通知 Intune 針對具有 Intune 產生 SCEP 密碼的 SCEP 要求所核發的憑證。 也請通知 Intune 處理這些 SCEP 要求時可能發生的錯誤。
    • 確認伺服器記錄足夠的資訊,以協助系統管理員針對問題進行疑難排解
  7. 完成本文中的 整合測試 () ,並解決任何問題

  8. 提供書面指引給客戶,說明:

    • SCEP 伺服器必須如何在 Microsoft Intune 系統管理中心上線
    • 如何取得設定程式庫所需的Azure 應用程式識別碼和Azure 應用程式金鑰

在 Azure 中將 SCEP 伺服器上線

若要向 Intune 進行驗證,SCEP 伺服器需要Azure 應用程式識別碼、Azure 應用程式金鑰和租使用者識別碼。 SCEP 伺服器也需要授權才能存取 Intune API。

若要取得此資料,SCEP 伺服器管理員會登入Azure 入口網站、註冊應用程式、提供應用程式Microsoft Intune API\SCEP 挑戰驗證權限和Application.Read.All許可權、建立應用程式的金鑰,然後下載應用程式識別碼、其金鑰和租使用者識別碼。

如需註冊應用程式及取得識別碼和金鑰的指引,請參閱使用入口網站建立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 應用程式識別碼」
  • AAD_APP_KEY=「上架程式期間取得的Azure 應用程式金鑰」
  • TENANT=「上執行緒序期間取得的租使用者識別碼」
  • PROVIDER_NAME_AND_VERSION=「用來識別產品及其版本的資訊」

如果您的解決方案需要具有驗證或不含驗證的 Proxy,您可以新增下列屬性:

  • PROXY_HOST=「裝載 Proxy 的主機。」
  • PROXY_PORT=「Proxy 正在接聽的埠」。
  • PROXY_USER=「Proxy 使用基本驗證時要使用的使用者名稱。」
  • PROXY_PASS=「Proxy 使用基本驗證時要使用的密碼」。

擲回

  • IllegalArgumentException - 如果建構函式在沒有適當屬性物件的情況下執行,則擲回。

重要事項

最好是具現化此類別的實例,並使用它來處理多個 SCEP 要求。 這樣做可減少額外負荷,因為它會快取驗證權杖和服務位置資訊。

安全性注意事項
SCEP 伺服器實作者必須保護保存至儲存體之組態屬性中輸入的資料,以避免遭到竄改和洩漏。 建議使用適當的 ACL 和加密來保護資訊。

ValidateRequest 方法

簽章

void ValidateRequest(
    String transactionId,
    String certificateRequest)

描述

驗證 SCEP 憑證要求。

參數

  • transactionId - SCEP 交易識別碼
  • 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)

描述

通知 Intune 憑證是在處理 SCEP 要求時建立的。

參數

  • transactionId - SCEP 交易識別碼
  • 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)

描述

通知 Intune 處理 SCEP 要求時發生錯誤。 這個方法不應該針對這個類別的方法所擲回的例外狀況叫用。

參數

  • transactionId - SCEP 交易識別碼
  • certificateRequest - DER 編碼的 PKCS #10 憑證要求 Base64 編碼為字串
  • hResult - Win32 錯誤碼,最能描述所發生的錯誤。 請參閱 Win32 錯誤碼
  • errorDescription - 發生錯誤的描述

擲回

  • IllegalArgumentException - 使用不正確參數呼叫時擲回
  • IntuneScepServiceException - 如果發現憑證要求無效,則擲回
  • 例外狀況 - 發生未預期的錯誤時擲回

重要事項

伺服器應該記錄此方法所擲回的例外狀況。 請注意, IntuneScepServiceException 屬性有憑證要求驗證失敗原因的詳細資訊。

安全性注意事項

  • 如果這個方法擲回例外狀況,SCEP 伺服器 就不能 對用戶端發出憑證。
  • SCEP 憑證要求驗證失敗可能表示 Intune 基礎結構發生問題。 或者,它們可能表示攻擊者正在嘗試取得憑證。
SetSslSocketFactory 方法

簽章

void SetSslSocketFactory(
    SSLSocketFactory factory)

描述

使用此方法來通知用戶端,它必須使用指定的 SSL 通訊端處理站 (,而不是與 Intune 通訊時的預設) 。

參數

  • Factory - 用戶端應該用於 HTTPS 要求的 SSL 通訊端處理站

擲回

  • IllegalArgumentException - 使用不正確參數呼叫時擲回

注意事項

如果需要,必須先設定 SSL 通訊端處理站,才能執行這個類別的其他方法。

整合測試

驗證和測試您的解決方案是否已正確與 Intune 整合是必須的。 下列列出步驟的概觀:

  1. 設定 Intune 試用帳戶
  2. 在本文的Azure 入口網站 (中將 SCEP 伺服器上線) 。
  3. 使用將 SCEP 伺服器 上線時所建立的識別碼和金鑰來設定 SCEP 伺服器。
  4. 註冊裝置 以測試案例 測試矩陣中的案例。
  5. 為測試憑證授權單位單位建立受信任的根憑證設定檔
  6. 建立 SCEP 設定檔以測試案例 測試矩陣中所列的案例。
  7. 將設定檔指派 給註冊其裝置的使用者。
  8. 等候裝置與 Intune 同步。 或者,手動 同步處理裝置
  9. 確認信任的根憑證和 SCEP 設定檔已部署至裝置
  10. 確認所有裝置上都已安裝受信任的根憑證。
  11. 確認指派設定檔的 SCEP 憑證已安裝在所有裝置上。
  12. 確認已安裝憑證的屬性符合 SCEP 設定檔中設定的屬性。
  13. 確認已發行的憑證正確地列在 Intune 系統管理中心

另請參閱