인증서 소개
이 문서는 UWP(Universal Windows Platform) 앱에서 인증서를 사용하는 방법에 대해 설명합니다. 디지털 인증서는 공개 키를 사람, 컴퓨터 또는 조직에 바인딩하기 위해 공개 키 암호화에 사용됩니다. 바인딩된 ID는 한 엔터티를 다른 엔터티에 인증하는 데 가장 자주 사용됩니다. 예를 들어, 인증서는 웹 서버를 사용자에게 인증하고 사용자를 웹 서버에 인증하는 데 자주 사용됩니다. 인증서 요청을 만들고, 발급된 인증서를 설치하거나 가져올 수 있습니다. 인증서를 인증서 계층 구조에 등록할 수도 있습니다.
공유 인증서 저장소
UWP 앱은 Windows 8에 도입된 새로운 격리 애플리케이션 모델을 사용합니다. 이 모델에서 앱은 명시적으로 허용되지 않는 한 앱이 자체 외부의 리소스 또는 파일에 액세스하는 것을 금지하는 앱 컨테이너라는 하위 수준 운영 체제 구문에서 실행됩니다. 다음의 섹션에서는 PKI(공개 키 인프라)에 미치는 영향에 대해 설명합니다.
앱 컨테이너당 인증서 스토리지
특정 앱 컨테이너에서 사용하기 위한 인증서는 앱 컨테이너 위치별로, 사용자별로 저장됩니다. 앱 컨테이너에서 실행되는 앱은 자체 인증서 스토리지에 대한 쓰기 액세스 권한을 가집니다. 애플리케이션이 해당 저장소에 인증서를 추가하는 경우, 이러한 인증서를 다른 앱에서 읽을 수 없습니다. 앱을 제거하면 앱과 관련된 인증서도 제거됩니다. 또한 앱은 MY 및 REQUEST 저장소 이외의 로컬 컴퓨터 인증서 저장소에 대한 읽기 권한을 가집니다.
캐시
각 앱 컨테이너는 유효성 검사, CRL(인증서 해지 목록) 및 OCSP(온라인 인증서 상태 프로토콜) 응답에 필요한 발급자 인증서를 저장할 수 있는 격리된 캐시를 가집니다.
공유 인증서 및 키
판독기에 스마트 카드가 삽입되면 카드에 포함된 인증서와 키가 사용자 MY 저장소로 전파되어 사용자가 실행 중인 모든 완전 신뢰 애플리케이션에서 공유될 수 있습니다. 하지만 앱 컨테이너는 기본적으로 사용자별 내 저장소에 액세스할 수 없습니다.
이 문제를 해결하고 보안 주체 그룹이 리소스 그룹에 액세스할 수 있도록 앱 컨테이너 격리 모델은 기능 개념을 지원합니다. 앱 컨테이너 프로세스는 기능을 통해 특정 리소스에 액세스할 수 있습니다. sharedUserCertificates 기능은 사용자의 내 저장소 및 스마트 카드가 신뢰할 수 있는 루트 저장소에 포함된 인증서 및 키에 대한 읽기 권한을 앱 컨테이너에 부여합니다. 이 기능은 사용자 REQUEST 저장소에 대한 읽기 권한을 부여하지 않습니다.
다음의 예시와 같이 매니페스트에서 sharedUserCertificates 기능을 지정합니다.
<Capabilities>
<Capability Name="sharedUserCertificates" />
</Capabilities>
인증서 필드
X.509 공개 키 인증서 표준은 시간이 지남에 따라 수정되었습니다. 데이터 구조의 각 연속 버전은 다음의 그림과 같이 이전 버전에 존재했던 필드를 유지하고 더 많이 추가했습니다.
이러한 필드 및 확장 중 일부를 CertificateRequestProperties 클래스를 사용하여 인증서 요청을 만들 때 직접 지정할 수 있습니다. 대부분은 할 수 없습니다. 이러한 필드는 발급 기관에서 채우거나 비워 둘 수 있습니다. 필드에 대한 자세한 정보를 보려면, 다음의 섹션을 참조하세요.
버전 1 필드
필드 | 설명 |
---|---|
버전 | 인코딩된 인증서의 버전 번호를 지정합니다. 현재, 이 필드의 가능한 값은 0, 1 또는 2입니다. |
일련 번호 | CA(인증 기관)가 인증서에 할당한 양의 고유 정수를 포함합니다. |
서명 알고리즘 | CA가 인증서에 서명하기 위해 사용하는 알고리즘을 지정하는 OID(개체 식별자)를 포함합니다. 예를 들어, 1.2.840.113549.1.1.5는 RSA Labies의 RSA 암호화 알고리즘과 결합된 SHA-1 해시 알고리즘을 지정합니다. |
Issuer | 인증서를 만들고 서명한 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 해시입니다. |