Microsoft Intune에서 타사 CA(인증 기관)를 추가하고 이러한 CA가 SCEP(단순 인증서 등록 프로토콜)를 사용하여 인증서를 발급하고 유효성을 검사할 수 있습니다. 타사 인증 기관 추가 는 이 기능에 대한 개요를 제공하고 Intune의 관리자 작업을 설명합니다.
Microsoft가 GitHub.com 게시한 오픈 소스 라이브러리를 사용하는 몇 가지 개발자 작업도 있습니다. 라이브러리에는 다음과 같은 API가 포함되어 있습니다.
- Intune에서 동적으로 생성된 SCEP 암호의 유효성을 검사합니다.
- SCEP 요청을 제출하는 디바이스에서 만든 인증서를 Intune에 알립니다.
이 API를 사용하면 타사 SCEP 서버가 MDM 디바이스용 Intune SCEP 관리 솔루션과 통합됩니다. 라이브러리는 사용자의 인증, 서비스 위치 및 ODATA Intune 서비스 API와 같은 측면을 추상화합니다.
SCEP 관리 솔루션
관리자는 Intune을 사용하여 SCEP 프로필을 만든 다음 MDM 디바이스에 이러한 프로필을 할당합니다. SCEP 프로필에는 다음과 같은 매개 변수가 포함됩니다.
- SCEP 서버의 URL
- 인증 기관의 신뢰할 수 있는 루트 인증서
- 인증서 특성 등
Intune으로 검사 디바이스에는 SCEP 프로필이 할당되고 이러한 매개 변수로 구성됩니다. Intune은 동적으로 생성된 SCEP 챌린지 암호를 만든 다음 디바이스에 할당됩니다.
이 챌린지에는 다음이 포함됩니다.
- 동적으로 생성된 챌린지 암호
- 디바이스가 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 요청 식별
- 요청 유효성 검사 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, 테넌트 ID 및 키 가져오기에 대한 지침은 포털을 사용하여 Microsoft Entra 애플리케이션 및 서비스 주체를 만들어 리소스에 액세스를 참조하세요.
Java 라이브러리 API
Java 라이브러리는 빌드될 때 종속성을 끌어오는 Maven 프로젝트로 구현됩니다. API는 클래스에 의해 네임스페이 com.microsoft.intune.scepvalidation
스 아래에 구현됩니다 IntuneScepServiceClient
.
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="프록시가 기본 인증을 사용하는 경우 사용할 암호입니다."
throw:
- IllegalArgumentException - 생성자가 적절한 속성 개체 없이 실행되는 경우 throw됩니다.
중요
이 클래스의 instance 인스턴스화하고 여러 SCEP 요청을 처리하는 데 사용하는 것이 가장 좋습니다. 이렇게 하면 인증 토큰 및 서비스 위치 정보를 캐시하므로 오버헤드가 줄어듭니다.
보안 정보 SCEP 서버 구현자는 변조 및 공개로부터 스토리지에 유지되는 구성 속성에 입력된 데이터를 보호해야 합니다. 적절한 ACL(액세스 제어 목록) 및 암호화를 사용하여 정보를 보호하는 것이 좋습니다.
ValidateRequest 메서드
서명:
void ValidateRequest(
String transactionId,
String certificateRequest)
설명:
SCEP 인증서 요청의 유효성을 검사합니다.
매개 변수:
- transactionId - SCEP 트랜잭션 ID
- certificateRequest - DER로 인코딩된 PKCS #10 인증서 요청 Base64가 문자열로 인코딩됨
throw:
- IllegalArgumentException - 유효하지 않은 매개 변수를 사용하여 호출된 경우 throw됨
- IntuneScepServiceException - 인증서 요청이 유효하지 않은 것으로 확인되면 throw됨
- 예외 - 예기치 않은 오류가 발생한 경우 throw됨
중요
서버는 이 메서드에서 throw된 예외를 기록해야 합니다. 속성에는 IntuneScepServiceException
인증서 요청 유효성 검사가 실패한 이유에 대한 자세한 정보가 있습니다.
보안 정보:
- 이 메서드가 예외를 throw하는 경우 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가 문자열로 인코딩되었습니다.
- certThumbprint - 프로비전된 인증서 지문의 SHA1 해시입니다.
- certSerialNumber - 프로비전된 인증서의 일련 번호입니다.
- certExpirationDate - 프로비전된 인증서의 만료 날짜입니다. 날짜 시간 문자열은 웹 UTC 시간(YYYY-MM-DDThh:mm:ss.sssTZD) ISO 8601로 서식을 지정해야 합니다.
- certIssuingAuthority - 인증서를 발급한 기관의 이름입니다.
throw:
- IllegalArgumentException - 유효하지 않은 매개 변수를 사용하여 호출된 경우 throw됩니다.
- IntuneScepServiceException - 인증서 요청이 유효하지 않은 것으로 확인되면 throw됩니다.
- 예외 - 예기치 않은 오류가 발생하면 throw됩니다.
중요
서버는 이 메서드에서 throw된 예외를 기록해야 합니다. 속성에는 IntuneScepServiceException
인증서 요청 유효성 검사가 실패한 이유에 대한 자세한 정보가 있습니다.
보안 정보:
- 이 메서드가 예외를 throw하는 경우 SCEP 서버는 클라이언트에 인증서를 발급 해서는 안 됩니다 .
- SCEP 인증서 요청 유효성 검사 실패는 Intune 인프라의 문제를 나타낼 수 있습니다. 또는 공격자가 인증서를 얻으려고 함을 나타낼 수 있습니다.
SendFailureNotification 메서드
서명:
void SendFailureNotification(
String transactionId,
String certificateRequest,
long hResult,
String errorDescription)
설명:
SCEP 요청을 처리하는 동안 오류가 발생했음을 Intune에 알립니다. 이 클래스의 메서드에서 throw된 예외에 대해 이 메서드를 호출하면 안 됩니다.
매개 변수:
- transactionId - SCEP 트랜잭션 ID입니다.
- certificateRequest - DER로 인코딩된 PKCS #10 인증서 요청 Base64가 문자열로 인코딩되었습니다.
- hResult - 발생한 오류를 가장 잘 설명하는 Win32 오류 코드입니다. Win32 오류 코드를 참조하세요.
- errorDescription - 발생한 오류에 대한 설명입니다.
throw:
- IllegalArgumentException - 유효하지 않은 매개 변수를 사용하여 호출된 경우 throw됩니다.
- IntuneScepServiceException - 인증서 요청이 유효하지 않은 것으로 확인되면 throw됩니다.
- 예외 - 예기치 않은 오류가 발생하면 throw됩니다.
중요
이 메서드에서 throw된 예외는 서버에서 기록해야 합니다. 속성에는 IntuneScepServiceException
인증서 요청 유효성 검사가 실패한 이유에 대한 자세한 정보가 있습니다.
보안 정보:
- 이 메서드가 예외를 throw하는 경우 SCEP 서버는 클라이언트에 인증서를 발급 해서는 안 됩니다 .
- SCEP 인증서 요청 유효성 검사 실패는 Intune 인프라의 문제를 나타낼 수 있습니다. 또는 공격자가 인증서를 얻으려고 함을 나타낼 수 있습니다.
SetSslSocketFactory 메서드
서명:
void SetSslSocketFactory(
SSLSocketFactory factory)
설명:
이 메서드를 사용하여 Intune과 통신할 때 지정된 SSL 소켓 팩터리(기본값 대신)를 사용해야 한다는 사실을 클라이언트에 알릴 수 있습니다.
매개 변수:
- 팩터리 - 클라이언트가 HTTPS 요청에 사용해야 하는 SSL 소켓 팩터리입니다.
throw:
- IllegalArgumentException - 유효하지 않은 매개 변수를 사용하여 호출된 경우 throw됩니다.
참고
이 클래스의 다른 메서드를 실행하기 전에 필요한 경우 SSL 소켓 팩터리를 설정해야 합니다.
DownloadCARevocationRequests 메서드
참고
CARevocationDownloadParameters를 사용하여 CertificateAuthorityRequests/downloadRevocationRequests에서 직접 호스트되는 원시 OData API를 사용하지 마세요. 이 API는 향후 API 업데이트에서 제거됩니다.
서명:
List<CARevocationRequest> DownloadCARevocationRequests(String transactionId,
int maxCARequestsToDownload, String issuerName)
설명:
Intune에서 해지 요청 목록을 다운로드합니다.
참고
DownloadCARevocationRequests를 사용하여 호출한 후 Intune은 60분의 냉각 기간을 적용합니다. 해당 기간 동안 중복 요청 및 API 오버로드를 방지하기 위해 해지 요청이 전송되지 않습니다.
원본 파일:
GitHub 원본 폴더 위치는 Microsoft/Intune-Resource-Access GitHub 리포지토리에 있습니다. IntuneRevocationClient.java 소스 파일입니다.
매개 변수:
- transactionId - 다운로드/업로드 결과 호출에서 로그 상관 관계를 허용하도록 전체 트랜잭션을 고유하게 식별하는 GUID 문자열입니다. 타사 API 호출자는 GUID를 만들려면 다음을 수행해야 합니다.
String transactionId = UUID.randomUUID.toString();
- maxCARequestsToDownload - Intune에서 다운로드할 최대 해지 요청 수입니다. 상한 값 100을 사용하는 것이 좋습니다.
참고
호출이 완료되면 Intune은 60분의 냉각 기간을 적용합니다. 해당 기간 동안 중복 요청 및 API 오버로드를 방지하기 위해 해지 요청이 전송되지 않습니다.
- issuerName – 이 값은 ScepRequestValidation 호출의 CertIssuingAuthority와 동일합니다. 최대 문자열 길이는 256자입니다.
throw:
- IntuneClientException - 서비스에서 알림 처리 실패를 보고하는 경우 throw됩니다. 예외 오류 코드를 검사합니다.
- IllegalArgumentException - 유효하지 않은 매개 변수를 사용하여 호출된 경우 throw됩니다.
보안 정보:
API 권한이 필요합니다. 자세한 내용 및 앱 등록 권한은 이 문서의 Azure에서 SCEP 서버 온보딩 을 참조하세요.
UploadRevocationResults 메서드
서명:
void UploadRevocationResults(
String transactionId,
List<CARevocationResult> revocationResults)
설명:
타사 CA에서 Intune으로 해지 결과 목록을 업로드합니다.
매개 변수:
transactionId - 다운로드/업로드 결과 호출에서 로그 상관 관계를 허용하도록 전체 트랜잭션을 고유하게 식별하는 GUID 문자열입니다. 타사 API 호출자는 DownloadCARevocationRequest 호출에서 동일한 transactionId를 사용해야 합니다.
revocationResults – Intune에 보낼 개체 목록
CARevocationResults
입니다.
throw:
- IntuneClientException - 서비스에서 알림 처리 실패를 보고하는 경우 throw됩니다. 예외 오류 코드를 검사합니다.
- IllegalArgumentException - 유효하지 않은 매개 변수를 사용하여 호출된 경우 throw됩니다.
C# API
C# API에는 SCEP 서비스에서 CA 해지 결과를 다운로드하고 업로드하는 데 사용하는 메서드가 포함되어 있습니다.
DownloadCARevocationRequestsAsync 메서드
참고
CARevocationDownloadParameters를 사용하여 CertificateAuthorityRequests/downloadRevocationRequests에서 직접 호스트되는 원시 OData API를 사용하지 마세요. 이 API는 향후 API 업데이트에서 제거됩니다.
서명:
Task<List<CARevocationRequest>> DownloadCARevocationRequestsAsync(
string transactionId,
int maxCARevocationRequestsToDownload,
string issuerName = null)
설명:
CA 해지 요청 목록을 반환합니다.
참고
DownloadCARevocationRequestsAsync를 사용하여 호출한 후 Intune은 60분의 냉각 기간을 적용합니다. 해당 기간 동안 중복 요청 및 API 오버로드를 방지하기 위해 해지 요청이 전송되지 않습니다.
원본 파일:
GitHub 원본 폴더 위치는 Microsoft/Intune-Resource-Access GitHub 리포지토리에 있습니다.
IntuneRevocationClient.cs
은 원본 파일입니다.
매개 변수:
- transactionId - 다운로드/업로드 결과 호출에서 로그 상관 관계를 허용하도록 전체 트랜잭션을 고유하게 식별하는 GUID 문자열입니다. 타사 API 호출자는 GUID를 만들려면 다음을 수행해야 합니다.
var transactionId = Guid.NewGuid().ToString();
- maxCARequestsToDownload - Intune에서 다운로드할 최대 해지 요청 수입니다. 상한 값 100을 사용하는 것이 좋습니다.
참고
호출이 완료되면 Intune은 60분의 냉각 기간을 적용합니다. 해당 기간 동안 중복 요청 및 API 오버로드를 방지하기 위해 해지 요청이 전송되지 않습니다.
- issuerName (선택 사항) – 이 값은 ScepRequestValidation 호출의 CertIssuingAuthority 와 동일합니다. 최대 문자열 길이는 256자입니다.
throw:
- IntuneClientException - 서비스에서 알림 처리 실패를 보고하는 경우 throw됩니다. 예외 오류 코드를 검사합니다.
- IllegalArgumentException - 유효하지 않은 매개 변수를 사용하여 호출된 경우 throw됩니다.
보안 정보:
API 권한이 필요합니다. 자세한 내용 및 앱 등록 권한은 이 문서의 Azure에서 SCEP 서버 온보딩 을 참조하세요.
UploadRevocationResults 메서드
서명:
Task UploadRevocationResultsAsync(
string transactionId,
List<CARevocationResult> requestResults)
설명:
타사 CA에서 Intune으로 해지 결과 목록을 업로드합니다.
매개 변수:
transactionId - 다운로드/업로드 결과 호출에서 로그 상관 관계를 허용하도록 전체 트랜잭션을 고유하게 식별하는 GUID 문자열입니다. 타사 API 호출자는 DownloadCARevocationRequestsAsync 호출에서 동일한 transactionId를 사용해야 합니다.
revocationResults – Intune에 보낼 개체 목록
CARevocationResults
입니다.
throw:
IntuneClientException - 서비스에서 알림 처리 실패를 보고하는 경우 throw됩니다. 예외 오류 코드를 검사합니다.
IllegalArgumentException - 유효하지 않은 매개 변수를 사용하여 호출된 경우 throw됩니다.
통합 테스트
솔루션이 Intune과 제대로 통합되었는지 유효성 검사 및 테스트는 필수입니다. 다음은 단계에 대한 개요를 나열합니다.
- Intune 평가판 계정을 설정합니다.
- Azure Portal SCEP 서버를 온보딩합니다(이 문서).
- SCEP 서버를 온보딩할 때 만든 ID 및 키를 사용하여 SCEP 서버를 구성합니다.
- 디바이스를 등록 하여 시나리오 테스트 매트릭스의 시나리오를 테스트합니다.
- 테스트 인증 기관에 대한 신뢰할 수 있는 루트 인증서 프로필을 만듭니다.
- SCEP 프로필을 만들어 시나리오 테스트 매트릭스에 나열된 시나리오를 테스트합니다.
- 디바이스를 등록한 사용자에게 프로필을 할당합니다.
- 디바이스가 Intune과 동기화되기를 기다립니다. 또는 디바이스를 수동으로 동기화합니다.
- 신뢰할 수 있는 루트 인증서 및 SCEP 프로필이 디바이스에 배포되는지 확인합니다.
- 신뢰할 수 있는 루트 인증서가 모든 디바이스에 설치되어 있는지 확인합니다.
- 할당된 프로필에 대한 SCEP 인증서가 모든 디바이스에 설치되어 있는지 확인합니다.
- 설치된 인증서의 속성이 SCEP 프로필에 설정된 속성과 일치하는지 확인합니다.
- 발급된 인증서가 Intune 관리 센터에 올바르게 나열되었는지 확인합니다.
참고 항목
- 타사 CA 추가 개요
- Intune 설정
- 디바이스 등록
- SCEP 인증서 프로필 구성 (Microsoft 네트워크 디바이스 등록 서비스 서버\커넥터 설정은 이 시나리오에 사용되지 않음)