다음을 통해 공유


API를 사용하여 Intune에 SCEP용 타사 CA 추가

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는 클래스에 의해 네임스페이 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과 제대로 통합되었는지 유효성 검사 및 테스트는 필수입니다. 다음은 단계에 대한 개요를 나열합니다.

  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 관리 센터에 올바르게 나열되었는지 확인합니다.

참고 항목