인증서 소개

이 문서는 UWP(Universal Windows Platform) 앱에서 인증서를 사용하는 방법에 대해 설명합니다. 디지털 인증서는 공개 키를 사람, 컴퓨터 또는 조직에 바인딩하기 위해 공개 키 암호화에 사용됩니다. 바인딩된 ID는 한 엔터티를 다른 엔터티에 인증하는 데 가장 자주 사용됩니다. 예를 들어, 인증서는 웹 서버를 사용자에게 인증하고 사용자를 웹 서버에 인증하는 데 자주 사용됩니다. 인증서 요청을 만들고, 발급된 인증서를 설치하거나 가져올 수 있습니다. 인증서를 인증서 계층 구조에 등록할 수도 있습니다.

공유 인증서 저장소

UWP 앱은 Windows 8에 도입된 새로운 격리 애플리케이션 모델을 사용합니다. 이 모델에서 앱은 명시적으로 허용되지 않는 한 앱이 자체 외부의 리소스 또는 파일에 액세스하는 것을 금지하는 앱 컨테이너라는 하위 수준 운영 체제 구문에서 실행됩니다. 다음의 섹션에서는 PKI(공개 키 인프라)에 미치는 영향에 대해 설명합니다.

앱 컨테이너당 인증서 스토리지

특정 앱 컨테이너에서 사용하기 위한 인증서는 앱 컨테이너 위치별로, 사용자별로 저장됩니다. 앱 컨테이너에서 실행되는 앱은 자체 인증서 스토리지에 대한 쓰기 액세스 권한을 가집니다. 애플리케이션이 해당 저장소에 인증서를 추가하는 경우, 이러한 인증서를 다른 앱에서 읽을 수 없습니다. 앱을 제거하면 앱과 관련된 인증서도 제거됩니다. 또한 앱은 MY 및 REQUEST 저장소 이외의 로컬 컴퓨터 인증서 저장소에 대한 읽기 권한을 가집니다.

캐시

각 앱 컨테이너는 유효성 검사, CRL(인증서 해지 목록) 및 OCSP(온라인 인증서 상태 프로토콜) 응답에 필요한 발급자 인증서를 저장할 수 있는 격리된 캐시를 가집니다.

공유 인증서 및 키

판독기에 스마트 카드가 삽입되면 카드에 포함된 인증서와 키가 사용자 MY 저장소로 전파되어 사용자가 실행 중인 모든 완전 신뢰 애플리케이션에서 공유될 수 있습니다. 하지만 앱 컨테이너는 기본적으로 사용자별 내 저장소에 액세스할 수 없습니다.

이 문제를 해결하고 보안 주체 그룹이 리소스 그룹에 액세스할 수 있도록 앱 컨테이너 격리 모델은 기능 개념을 지원합니다. 앱 컨테이너 프로세스는 기능을 통해 특정 리소스에 액세스할 수 있습니다. sharedUserCertificates 기능은 사용자의 내 저장소 및 스마트 카드가 신뢰할 수 있는 루트 저장소에 포함된 인증서 및 키에 대한 읽기 권한을 앱 컨테이너에 부여합니다. 이 기능은 사용자 REQUEST 저장소에 대한 읽기 권한을 부여하지 않습니다.

다음의 예시와 같이 매니페스트에서 sharedUserCertificates 기능을 지정합니다.

<Capabilities>
    <Capability Name="sharedUserCertificates" />
</Capabilities>

인증서 필드

X.509 공개 키 인증서 표준은 시간이 지남에 따라 수정되었습니다. 데이터 구조의 각 연속 버전은 다음의 그림과 같이 이전 버전에 존재했던 필드를 유지하고 더 많이 추가했습니다.

x.509 certificate versions 1, 2, and 3

이러한 필드 및 확장 중 일부를 CertificateRequestProperties 클래스를 사용하여 인증서 요청을 만들 때 직접 지정할 수 있습니다. 대부분은 할 수 없습니다. 이러한 필드는 발급 기관에서 채우거나 비워 둘 수 있습니다. 필드에 대한 자세한 정보를 보려면, 다음의 섹션을 참조하세요.

버전 1 필드

필드 설명
버전 인코딩된 인증서의 버전 번호를 지정합니다. 현재, 이 필드의 가능한 값은 0, 1 또는 2입니다.
일련 번호 CA(인증 기관)가 인증서에 할당한 양의 고유 정수를 포함합니다.
서명 알고리즘 CA가 인증서에 서명하기 위해 사용하는 알고리즘을 지정하는 OID(개체 식별자)를 포함합니다. 예를 들어, 1.2.840.113549.1.1.5는 RSA Labies의 RSA 암호화 알고리즘과 결합된 SHA-1 해시 알고리즘을 지정합니다.
발급자 인증서를 만들고 서명한 CA의 X.500 고유 이름(DN)을 포함합니다.
유효성 검사 인증서가 유효한 시간 간격을 지정합니다. 2049년 말까지의 날짜는 협정 세계시(그리니치 표준시) 형식(yymmddhhmmssz)을 사용합니다. 2050년 1월 1일부터 시작되는 날짜는 일반화된 시간 형식(yyyymmddhhmmssz)을 사용합니다.
주체 인증서에 포함된 공개 키와 연결된 엔터티의 X.500 고유 이름을 포함합니다.
공개 키 공개 키 및 관련 알고리즘 정보를 포함합니다.

버전 2 필드

X.509 버전 2 인증서는 버전 1에 정의된 기본 필드를 포함하며 다음의 필드를 추가합니다.

필드 설명
발행자 고유 식별자 시간이 지남에 따라 다른 엔터티에서 다시 사용할 때 CA의 X.500 이름을 명확하게 만들기 위해 사용할 수 있는 고유 값을 포함합니다.
주체 고유 식별자 시간이 지남에 따라 다른 엔터티에서 다시 사용할 때 인증서 주체의 X.500 이름을 명확하게 만들기 위해 사용할 수 있는 고유 값을 포함합니다.

버전 3 확장

X.509 버전 3 인증서는 버전 1 및 버전 2에 정의된 필드를 포함하며, 인증서 확장을 추가합니다.

필드 설명
기관 키 식별자 인증서에 서명하는 데 사용한 CA 개인 키에 해당하는 인증서 기관(CA) 공개 키를 식별합니다.
기본 제약 조건 엔터티를 CA로 사용할 수 있는지 여부, 사용할 수 있는 경우 인증서 체인에서 그 아래에 존재할 수 있는 하위 CA의 수를 지정합니다.
인증서 정책 인증서가 발급된 정책과 인증서를 사용할 수 있는 목적을 지정합니다.
CRL 배포 지점 기본 인증서 해지 목록(CRL)의 URI를 포함합니다.
확장된 키 사용량 인증서에 포함된 공개 키를 사용할 수 있는 방법을 지정합니다.
발급자 대체 이름 인증서 요청의 발급자에 대한 하나 이상의 대체 이름 양식을 지정합니다.
키 사용량 인증서에 포함된 공개 키로 수행할 수 있는 작업에 대한 제한을 지정합니다.
이름 제약 조건 인증서 계층 구조의 모든 주체 이름이 위치해야 하는 네임스페이스를 지정합니다. 확장은 CA 인증서에서만 사용됩니다.
정책 제약 조건 정책 매핑을 금지하거나 계층 구조의 각 인증서에 허용 가능한 정책 식별자를 포함하도록 요구하여 경로 유효성 검사를 제한합니다. 확장은 CA 인증서에서만 사용됩니다.
정책 매핑 발급 CA의 정책에 해당하는 하위 CA의 정책을 지정합니다.
프라이빗 키 사용 기간 개인 키가 연결된 인증서와 다른 개인 키의 유효 기간을 지정합니다.
주체 대체 이름 인증서 요청의 주체에 대한 하나 이상의 대체 이름 양식을 지정합니다. 대체 양식의 예시로는 이메일 주소, DNS 이름, IP 주소 및 URI가 있습니다.
주체 디렉터리 특성 인증서 주체의 국적과 같은 식별 속성을 전달합니다. 확장 값은 OID-값 쌍의 시퀀스입니다.
주체 키 식별자 인증서 주체가 보유한 여러 개의 공개 키를 구별합니다. 확장 값은 일반적으로 키의 SHA-1 해시입니다.