使用 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 管理解決方案
系統管理員會使用 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 中建立方案和專案。
註冊以接收來自存放庫的通知
複製或下載存放庫
移至資料夾下
\src\CsrValidation
所需的連結庫實作 (https://github.com/Microsoft/Intune-Resource-Access/tree/develop/src/CsrValidation)使用自述檔中的指示建置連結庫
在建置 SCEP 伺服器的專案中包含連結庫
在 SCEP 伺服器上完成下列工作:
- 允許系統管理員設定 Azure 應用程式識別碼、Azure 應用程式密鑰和租使用者識別 碼 (在本文中) 連結庫用於驗證。 應允許系統管理員更新 Azure 應用程式金鑰。
- 識別包含 Intune 產生的 SCEP 密碼的 SCEP 要求
- 使用 驗證要求 API 連結庫來驗證 Intune 產生的 SCEP 密碼
- 使用連結庫通知 API 來通知 Intune 針對具有 Intune 產生 SCEP 密碼的 SCEP 要求所核發的憑證。 也請通知 Intune 處理這些 SCEP 要求時可能發生的錯誤。
- 確認伺服器記錄足夠的資訊,以協助系統管理員針對問題進行疑難解答
完成本文中的 整合測試 () ,並解決任何問題
提供書面指引給客戶,說明:
- 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 整合是必須的。 下列列出步驟的概觀:
- 設定 Intune 試用帳戶。
- 在本文 中 (在 Azure 入口網站中將 SCEP 伺服器上線) 。
- 使用將 SCEP 伺服器 上線時所建立的識別碼和金鑰來設定 SCEP 伺服器。
- 註冊裝置 以測試案例 測試矩陣中的案例。
- 為測試證書頒發機構單位建立受信任的跟證書配置檔。
- 建立 SCEP 配置檔以測試案例 測試矩陣中所列的案例。
- 將配置檔指派 給註冊其裝置的使用者。
- 等候裝置與 Intune 同步。 或者,手動 同步處理裝置。
- 確認信任的跟證書和SCEP 配置檔已部署至裝置。
- 確認所有裝置上都已安裝受信任的跟證書。
- 確認指派配置檔的SCEP憑證已安裝在所有裝置上。
- 確認已安裝憑證的屬性符合 SCEP 設定檔中設定的屬性。
- 確認已發行的憑證正確地列在 Intune 系統管理中心
另請參閱
- 新增第三方 CA 概觀
- 設定 Intune
- 裝置註冊
- 在此案例中不會使用 Microsoft NDES Server\Connector 安裝程式 (設定 SCEP 憑證設定檔)