Share via


CertFindChainInStore 함수(wincrypt.h)

CertFindChainInStore 함수는 지정된 조건을 충족하는 저장소에서 첫 번째 또는 다음 인증서를 찾습니다. 그런 다음 해당 인증서에 대한 인증서 체인 컨텍스트를 빌드하고 확인합니다. dwFindFlags, dwFindTypepvFindPara 매개 변수에 의해 설정된 조건에 따라 체인을 찾은 인증서와 체인이 빌드되는 인증서가 선택됩니다. 이 함수는 루프에서 지정된 찾기 조건과 일치하는 인증서 저장소의 모든 인증서를 찾고 찾은 각 인증서에 대한 인증서 체인 컨텍스트를 빌드하는 데 사용할 수 있습니다.

구문

PCCERT_CHAIN_CONTEXT CertFindChainInStore(
  [in] HCERTSTORE           hCertStore,
  [in] DWORD                dwCertEncodingType,
  [in] DWORD                dwFindFlags,
  [in] DWORD                dwFindType,
  [in] const void           *pvFindPara,
  [in] PCCERT_CHAIN_CONTEXT pPrevChainContext
);

매개 변수

[in] hCertStore

체인이 빌드된 인증서를 검색할 저장소의 핸들입니다. 이 핸들은 체인이 빌드될 때 CertGetCertificateChain 함수에 추가 저장소로 전달됩니다.

[in] dwCertEncodingType

저장소 를 인코딩하는 데 사용된 인증서 인코딩 형식 입니다. 이 값의 높은 WORD에 포함된 메시지 인코딩 형식 식별자는 이 함수에서 무시됩니다.

이 매개 변수는 현재 정의된 다음 인증서 인코딩 유형일 수 있습니다.

의미
X509_ASN_ENCODING
1(0x1)
X.509 인증서 인코딩을 지정합니다.

[in] dwFindFlags

검색에 대한 추가 옵션을 포함합니다. 이 매개 변수의 가능한 값은 dwFindType 매개 변수의 값에 따라 달라집니다.

이 매개 변수는 dwFindTypeCERT_CHAIN_FIND_BY_ISSUER 포함된 경우 다음 값 중 하나 이상의 조합 또는 0을 포함할 수 있습니다.

의미
CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG
인증서의 공개 키를 암호화 서비스 공급자의공개 키와 비교합니다. 이 비교는 체인을 빌드할 때 체인에서 수행된 마지막 검사.

발급자의 hCryptProv 멤버에 프라이빗 키가 포함되어 있으므로 이 프로세스 중에 여러 번 확인해야 할 수 있습니다. 이 검사를 용이하게 하기 위해 dwAcquirePrivateKeyFlags 멤버를 CERT_CHAIN_FIND_BY_ISSUER_PARA 구조에서 설정하여 해당 hCryptProv의 캐싱을 사용하도록 설정할 수 있습니다.

CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG
기본적으로 첫 번째 단순 체인만 발급자 이름과 일치하는지 확인합니다. 이 플래그를 설정하면 기본값이 재정의되고 이후의 단순 체인도 발급자 이름 일치 여부를 확인합니다.
CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG
캐시된 시스템 저장소(Root, My, Ca, Trust)만 검색하여 발급자 인증서를 찾도록 하여 이 함수의 성능을 향상시킵니다. 이 플래그가 설정되지 않은 경우 함수는 캐시된 시스템 저장소와 hCertStore 매개 변수로 표시되는 저장소를 검색합니다.
CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG
URL 캐시만 검색됩니다. 인터넷이 검색되지 않습니다.
CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG
로컬 컴퓨터 인증서 저장소만 엽니다. 현재 사용자의 인증서 저장소가 열리지 않습니다.
CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG
인증서에 연결된 프라이빗 키가 있는지 여부를 확인하는 검사 없습니다.

[in] dwFindType

저장소에서 인증서를 찾는 데 사용할 조건을 결정합니다.

이 매개 변수는 현재 정의된 다음 값일 수 있습니다.

CERT_CHAIN_FIND_BY_ISSUER

발급자의 이름을 기반으로 인증서를 찾습니다. pvFindPara 매개 변수는 검색을 수정하는 멤버를 포함하는 CERT_CHAIN_FIND_BY_ISSUER_PARA 구조체에 대한 포인터입니다.

인증서 체인은 사용 가능한 프라이빗 키가 있는 인증서용으로 빌드됩니다. 기본적으로 첫 번째 단순 체인의 발급자만 발급자 이름 일치에서 비교됩니다. 이 플래그가 설정되면 모든 체인이 발급자 이름 집합 중 하나와 일치하는 발급자 인증서를 확인합니다.

이 함수는 pvFindPara 구조에 전달된 BLOB 이름을 루트 인증서의 인증 기관뿐만 아니라 체인의 CA(인증 기관)와 비교합니다.

이 함수는 해지 검사를 수행하지 않습니다.

pPrevChainContextNULL이 아닌 경우 이 함수는 함수가 호출될 때마다 다른 인증서에 대한 체인을 반환합니다. 적합한 인증서가 하나만 있지만 두 개의 일치하는 발급 인증 기관이 있고 그 중 하나가 해지된 경우 이 함수는 해지된 체인을 반환할 수 있습니다. 그런 다음 애플리케이션이 CertVerifyRevocation 함수에 대한 호출을 통해 해지 자체를 확인하고 체인이 적합하지 않다고 판단되면 CertFindChainStore 함수에 대한 추가 호출은 유효한 인증 기관의 동일한 인증서를 포함하는 체인을 반환하지 않습니다. 이러한 체인을 찾을 수 없는 경우 다른 인증서 또는 NULL을 사용하여 완전히 다른 체인을 반환합니다.

[in] pvFindPara

추가 검색 조건을 포함하는 포인터입니다. 이 매개 변수가 가리키는 데이터의 형식과 형식은 dwFindType 매개 변수의 값에 따라 달라집니다.

[in] pPrevChainContext

이 함수에 대한 이전 호출에서 반환된 CERT_CHAIN_CONTEXT 구조체에 대한 포인터입니다. 이 인증서에서 검색이 시작됩니다. 이 함수에 대한 첫 번째 호출의 경우 이 매개 변수는 NULL이어야 합니다. 후속 호출에서는 함수에 대한 이전 호출에서 반환된 포인터입니다. 이 매개 변수가 NULL이 아닌 경우 이 함수는 이 구조를 해제합니다.

반환 값

첫 번째 또는 다음 체인 컨텍스트가 빌드되지 않은 경우 NULL 이 반환됩니다. 그렇지 않으면 읽기 전용 CERT_CHAIN_CONTEXT 구조체에 대한 포인터가 반환됩니다. 이 함수에 대한 후속 호출에서 pPrevChainContext 매개 변수로 전달되면 CERT_CHAIN_CONTEXT 구조체가 해제됩니다. 그렇지 않으면 certFreeCertificateChain 함수를 호출하여 CERT_CHAIN_CONTEXT 구조체를 명시적으로 해제해야 합니다.

설명

체인 컨텍스트를 빌드하려면 첫 번째 호출에서 pPrevChainContext 매개 변수가 NULL 이어야 합니다. 다음 체인 컨텍스트를 빌드하기 위해 pPrevChainContext 는 이전 호출에서 반환된 CERT_CHAIN_CONTEXT 구조체로 설정됩니다. pPrevChainContextNULL이 아닌 경우 오류가 발생하더라도 CertFreeCertificateChain 함수를 사용하여 이 함수에서 구조체를 항상 해제합니다.

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 wincrypt.h
라이브러리 Crypt32.lib
DLL Crypt32.dll

추가 정보

CERT_CHAIN_CONTEXT

CERT_CHAIN_FIND_BY_ISSUER_PARA

CertFreeCertificateChain

CertGetCertificateChain

인증서 체인 확인 함수