CrL(Crypt32 인증서 해지 목록) 의미 체계
Crypt32는 온라인 해지 검사를 위한 CRL(인증서 해지 목록) 의미 체계를 지원합니다. 이 문서에서는 Crypt32가 온라인 해지 확인을 위해 CRL을 사용하는 방법과 CRL 사전 인출 및 분할을 사용하여 성능을 향상시키는 방법에 대한 정보를 제공합니다.
소개
온라인 해지를 사용하도록 설정된 Crypt32 CertGetCertificateChain API가 호출되면 다음과 같이 유효한 시간 OCSP 응답 또는 CRL을 검색하려고 시도합니다.
- 유효한 스테이플된 OCSP 응답이 핸드셰이크에 포함되었는지 확인합니다.
- 사용자의 Cryptnet URL 캐시에 시간 유효한 OCSP 응답 또는 CRL이 있는지 확인합니다.
- 시스템 저장소에 HKLM\CA와 같은 시간 유효한 CRL이 있는지 확인합니다.
- 주체 인증서의 AIA 확장에 있는 OCSP URL의 경우 OCSP 서버에서 OCSP 응답을 다운로드합니다.
- 성공하려면 사용자의 Cryptnet URL 캐시에 OCSP 응답을 추가합니다.
- 주체 인증서의 CRL CDP 확장의 경우 CA(인증 기관)의 CRL 서버에서 CRL을 다운로드합니다.
- 성공하려면 CRL을 사용자의 Cryptnet URL 캐시에 추가합니다.
Cryptnet URL 캐시에 추가된 CRL의 경우 CRL에 "1.3.6.1.4.1.311.21.4"(다음 CRL 게시) 확장이 있는 경우 만료되기 전에 다음 CRL이 검색됩니다. 이 확장을 추가하면 인증서 유효성 검사 중에 초기 CRL 다운로드만 수행됩니다. Crypt32에서 이 확장을 사용하여 다음 CRL을 미리 가져오는 방법에 대한 자세한 내용은 CRL 사전 인출 섹션을 참조하세요.
CA가 대량의 인증서를 발급하는 경우 CRL에서 해지된 항목 수도 커져 CRL의 크기가 증가할 수 있습니다. CRL의 크기를 확인하기 위해 Microsoft는 다운로드한 CRL에 추가된 "2.5.29.28"(발급 배포 지점) 확장을 통해 CRL 분할을 권장하고 지원합니다. Crypt32가 이 확장을 통해 CRL 분할을 지원하는 방법에 대한 자세한 내용은 CRL 분할 섹션을 참조하세요.
CA는 OCSP에 대한 지원을 중단하는 것을 고려하고 CRL만 지원하므로 온라인 해지를 사용하도록 설정된 CertGetCertificateChain API를 호출하는 애플리케이션에 미치는 영향을 고려해야 합니다.
- 첫 번째 유효성 검사에서 호출 애플리케이션은 주문형 CRL 다운로드를 수행하고 CRL이 다운로드될 때까지 API가 완료되지 않도록 차단합니다.
- 대용량 TLS 서버의 경우 CA의 CRL 서버에서 해당하는 대용량 다운로드가 있습니다.
- CRL이 커지면 대용량 다운로드를 처리할 수 있는 서버에 직접적인 영향을 줍니다.
- 분할된 CRL을 지원하여 CRL의 크기를 제한할 수 있습니다.
- 이후 유효성 검사는 CRL이 만료될 때까지 캐시된 CRL을 사용합니다. CRL이 만료되면 다음 유효성 검사를 위해 위의 작업이 반복됩니다.
- 이 주문형 CRL 다운로드는 다음 CRL 게시 확장을 추가하여 방지할 수 있습니다.
다음 섹션에서는 CRL만 사용되는 온라인 해지 성능을 개선하기 위해 CRL 사전 인출 및 분할에 대한 정보를 제공합니다.
CRL 사전 인출
인코딩된 CRL에는 CRL이 게시된 시기와 다음에 게시된 CRL을 검색하기 전에 클라이언트가 캐시할 수 있는 기간을 나타내는 다음 두 필드가 있습니다.
ThisUpdate GeneralizedTime,
NextUpdate GeneralizedTime OPTIONAL,
NextUpdate가 누락된 경우 게시할 마지막 CRL이며 만료되지 않습니다.
CRL에는 GeneralizedTime으로 인코딩된 "1.3.6.1.4.1.311.21.4"(다음 CRL 게시) 확장이 포함될 수 있습니다. 이 확장이 있는 경우 Crypt32는 다음과 같이 이 PublishTime 이후 및 NextUpdate 이전에 게시된 다음 CRL을 미리 가져오려고 시도합니다.
주어진, PublishPeriod = NextUpdate – PublishTime
. 다음 세 가지 구성 매개 변수는 PreFetchPeriod의 시작과 끝을 결정하는 데 사용됩니다.
- AfterPublishPreFetchDivisor
- PreFetchPeriod의 시작은 PublishPeriod를 이 divisor로 나누어 PublishTime 이후에 지연됩니다.
- 기본값: 10
- BeforeNextUpdatePreFetchDivisor
- PreFetchPeriod의 완료는 PublishPeriod를 이 수비자로 나누어 NextUpdate 전에 발생합니다.
- 기본값: 20
- MinPreFetchPeriod
- 주어진,
PreFetchPeriod = PreFetchPeriodFinishTime – PreFetchPeriodStartTime
. PreFetchPeriod가 이 최소값을 초과하는 경우에만 프리페치를 사용할 수 있습니다. - 기본값: 1시간
- 주어진,
위의 계산 된 PreFetchPeriod를 고려할 때 각 클라이언트가 서버에서 게시된 CRL을 미리 가져오고 다운로드할 수 있도록 이 PreFetchPeriod 내에서 임의 시간이 선택됩니다.
기본 구성 값을 사용하는 몇 가지 예제 시간 및 해당 PreFetchPeriod 입니다.
CRL은 2일 동안 유효하며 매일 게시됩니다.
ThisUpdate: Nov 05 08:00
NextUpdate: Nov 07 08:00
PublishTime: Nov 06 08:00
PublishPeriod = 24 hours
PreFetchPeriodStartTime = PublishTime + 24/10 (2.4 hours)
PreFetchPeriodFinishTime = NextUpdate – 24/20 (1.2 hours)
PreFetchPeriod = Nov 06 10:24 .. Nov 07 06:48 = 20:24
Clients would randomly pre-fetch in the above PreFetchPeriod.
CRL은 8일 동안 유효하며 4일마다 게시됩니다.
ThisUpdate: Nov 03 08:00
NextUpdate: Nov 11 08:00
PublishTime: Nov 07 08:00
PublishPeriod = 96 hours
PreFetchPeriodStartTime = PublishTime + 96/10 (9.6 hours)
PreFetchPeriodFinishTime = NextUpdate – 96/20 (4.8 hours)
PreFetchPeriod = Nov 07 17:36 .. Nov 11 03:12 = 81:36
Clients would randomly pre-fetch in the above PreFetchPeriod
참고 항목
미리 가져온 CRL이 클라이언트에서 사용되지 않는 경우 클라이언트가 이 CRL에 대한 새 주문형 다운로드를 시작할 때까지 위의 사전 인출이 중지됩니다.
CRL 분할
이 섹션에서는 Crypt32에서 CRL 분할을 지원하는 방법에 대한 정보를 제공합니다.
예시
다음은 CRL 분할에 사용되는 일반적으로 형식이 지정된 CDP 및 IDP(ID 공급자) 확장의 예입니다.
CA에서 발급된 인증서의 첫 번째 파티션의 경우:
Cert CDP:
[1]CRL Distribution Point
Distribution Point Name:
Full Name:
URL=http://crl.godaddy.com/first.crl
CRL IDP:
Distribution Point Name:
Full Name:
URL=http://crl.godaddy.com/first.crl
Only Contains User Certs=No
Only Contains CA Certs=No
Indirect CRL=No
CA에서 발급된 인증서의 두 번째 파티션의 경우 CDP와 IDP 모두에서 다른 CRL을 가리킵니다.
Cert CDP:
[1]CRL Distribution Point
Distribution Point Name:
Full Name:
URL=http://crl.godaddy.com/second.crl
CRL IDP:
Distribution Point Name:
Full Name:
URL=http://crl.godaddy.com/second.crl
Only Contains User Certs=No
Only Contains CA Certs=No
Indirect CRL=No
여기에서 볼 수 있듯이 CDP와 IDP 모두에서 동일한 단일 http CRL URL이 사용됩니다. 또한 분할된 CRL은 CA에 의해 직접 서명되며 CA 및 최종 사용자 인증서 모두에 적용됩니다.
다음 섹션에서는 IDP 및 CDP 확장의 ASN.1 인코딩 및 Crypt32에서 지원하는 내용에 대해 자세히 설명합니다.
세부 정보
IDP(발급 배포 지점) 확장("2.5.29.28")의 ASN.1입니다.
--------------------------------------------
-- CRL Issuing Distribution Point Extension
--------------------------------------------
IssuingDistributionPoint ::= SEQUENCE {
issuingDistributionPoint [0] EXPLICIT DistributionPointName OPTIONAL,
onlyContainsUserCerts [1] IMPLICIT BOOLEAN DEFAULT FALSE,
onlyContainsCACerts [2] IMPLICIT BOOLEAN DEFAULT FALSE,
onlySomeReasons [3] IMPLICIT ReasonFlags OPTIONAL,
indirectCRL [4] IMPLICIT BOOLEAN DEFAULT FALSE
} --#public—
DistributionPointName ::= CHOICE {
fullName [0] IMPLICIT GeneralNames,
nameRelativeToCRLIssuer [1] IMPLICIT RelativeDistinguishedName
}
GeneralNames ::= SEQUENCE OF GeneralName
GeneralName ::= CHOICE {
otherName [0] IMPLICIT OtherName,
rfc822Name [1] IMPLICIT IA5STRING,
dNSName [2] IMPLICIT IA5STRING,
x400Address [3] IMPLICIT SeqOfAny,
directoryName [4] EXPLICIT NOCOPYANY, -- really Name
ediPartyName [5] IMPLICIT SeqOfAny,
uniformResourceLocator [6] IMPLICIT IA5STRING,
iPAddress [7] IMPLICIT OCTETSTRING,
registeredID [8] IMPLICIT EncodedObjectID
}
CRL에 IDP가 있는 경우 Windows 클라이언트는 다음과 같이 진행됩니다.
- 다음이 있는 IDP를 무시합니다.
- onlySomeReasons
- indirectCRL
- fullName 선택 항목이 있는 IDP만 지원합니다.
- CRL CDP에도 fullName 선택 항목이 있어야 합니다.
- OnlyContainsUserCerts 또는 OnlyContainsCACerts인 경우:
- 인증서의 기본 제약 조건 확장을 사용하여 IDP가 인증서에 적용 가능한지 확인합니다.
인증서의 CDP 확장에 대한 ASN.1입니다.
--------------------------------------------
-- CRL Distribution Points Extension
--------------------------------------------
CRLDistributionPoints ::= SEQUENCE OF DistributionPoint
DistributionPoint ::= SEQUENCE {
distributionPoint [0] EXPLICIT DistributionPointName OPTIONAL,
reasons [1] IMPLICIT ReasonFlags OPTIONAL,
cRLIssuer [2] IMPLICIT GeneralNames OPTIONAL
}
DistributionPointName see above
Windows 클라이언트는 다음을 수행합니다.
- CDP 이름과 일치할 때까지 IDP의 GeneralNames 시퀀스를 반복합니다 .
- CDP의 DistributionPoint 시퀀스를 반복합니다.
- CDP DistributionPoint 를 건너뜁니다.
- 이유
- cRLIssuer
- DistributionPointName에 대한 fullName 선택 항목이 없는 경우 CDP DistributionPoint를 건너뜁니다.
- CDP의 GeneralNames 시퀀스를 반복합니다.
- IDP 및 CDP GeneralName 이 일치하는지 확인
- IsSameGeneralName()이면 일치 항목이 있으며 주체 인증서에 CRL을 사용할 수 있습니다.
- IDP 및 CDP GeneralName 이 일치하는지 확인
- CDP DistributionPoint 를 건너뜁니다.
- CDP의 DistributionPoint 시퀀스를 반복합니다.
IsSameGeneralName(IDP_GeneralName, CDP_GeneralName)
IDP 및 CDP에는 동일한 GeneralName 선택이 있어야 합니다. 동일한 선택을 위해 선택한 항목에 따라 IDP 및 CDP 이름을 비교합니다.
- rfc822Name
- 대/소문자를 구분하지 않는 문자열 비교입니다. % 문자 정규화가 없습니다.
- dNSName
- 대/소문자를 구분하지 않는 문자열 비교입니다. % 문자 정규화가 없습니다.
- uniformResourceLocator(URL)
- 대/소문자를 구분하지 않는 문자열 비교입니다. % 문자 정규화가 없습니다.
- otherName
- OID 및 OID별 이진 값이 비교됩니다.
- registeredID
- OID를 비교합니다.
- directoryName
- 인코딩된 이름 바이트를 비교합니다.
- iPAddress
- 인코딩된 OCTET 바이트를 비교합니다.
- x400Address
- 지원되지 않습니다.
- ediPartyName
- 지원되지 않습니다.
uniformResourceLocator GeneralName 선택이 사용될 것이라는 기대가 있습니다.