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 요청 식별
- 요청 유효성 검사 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는 클래스에 의해 네임스페이 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가 문자열로 인코딩됨
- certThumprint - 프로비전된 인증서 지문의 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 소켓 팩터리를 설정해야 합니다.
통합 테스트
솔루션이 Intune 올바르게 통합되었는지 확인하고 테스트해야 합니다. 다음은 단계에 대한 개요를 나열합니다.
- Intune 평가판 계정을 설정합니다.
- Azure Portal SCEP 서버를 온보딩합니다(이 문서).
- SCEP 서버를 온보딩할 때 만든 ID 및 키를 사용하여 SCEP 서버를 구성합니다.
- 디바이스를 등록 하여 시나리오 테스트 매트릭스의 시나리오를 테스트합니다.
- 테스트 인증 기관에 대한 신뢰할 수 있는 루트 인증서 프로필을 만듭니다.
- SCEP 프로필을 만들어 시나리오 테스트 매트릭스에 나열된 시나리오를 테스트합니다.
- 디바이스를 등록한 사용자에게 프로필을 할당합니다.
- 디바이스가 Intune 동기화되기를 기다립니다. 또는 디바이스를 수동으로 동기화합니다.
- 신뢰할 수 있는 루트 인증서 및 SCEP 프로필이 디바이스에 배포되는지 확인합니다.
- 신뢰할 수 있는 루트 인증서가 모든 디바이스에 설치되어 있는지 확인합니다.
- 할당된 프로필에 대한 SCEP 인증서가 모든 디바이스에 설치되어 있는지 확인합니다.
- 설치된 인증서의 속성이 SCEP 프로필에 설정된 속성과 일치하는지 확인합니다.
- 발급된 인증서가 Intune 관리 센터에 올바르게 나열되었는지 확인합니다.
참고 항목
- 타사 CA 추가 개요
- 설치 Intune
- 디바이스 등록
- SCEP 인증서 프로필 구성 (Microsoft NDES Server\Connector 설정은 이 시나리오에 사용되지 않음)