다음을 통해 공유


인증서 저장소 상태 관리

여러 함수는 인증서 저장소상태를 관리하기 위한 서비스를 제공합니다.

인증서에 액세스하려면 인증서가 저장된 인증서 저장소를 CertOpenStore 또는 CertOpenSystemStore 호출을 통해 열어야 합니다.

일반적으로 인증서 저장소는 캐시된 메모리에서 열립니다. 새 저장소이거나 로컬 레지스트리, 원격 컴퓨터의 레지스트리, 디스크 파일, PKCS #7 메시지 또는 기타 원본에서 콘텐츠를 로드할 수 있습니다.

CryptoAPI 인증서 저장소 함수를 사용하면 저장소가 캐시된 메모리 외부에서 인증서를 유지 관리할 수 있습니다(예: Microsoft 인증서 서버 데이터베이스에서 제공하는 인증서와 같은 외부 인증서 데이터베이스).

CertOpenStore 함수의 매개 변수 중 하나인 lpszStoreProvider는 열린 저장소 유형과 해당 저장소를 여는 데 사용되는 공급자를 결정합니다. 다양한 공급자를 사용하여 인증서 저장소를 여는 예제는 인증서 저장소 열기에 대한 예제 C 코드를 참조하세요.

CertCloseStore 는 인증서 저장소를 닫습니다. 인증서 저장소가 닫혀 있으면 해당 저장소의 각 인증서 컨텍스트에 대한 참조 수가 1씩 줄어듭니다. 참조 횟수가 0으로 가는 인증서의 경우 메모리가 해제됩니다.

CertCloseStore를 사용하여 CERT_CLOSE_STORE_FORCE_FLAG 설정하면 인증서 저장소가 닫히고 참조 수에 관계없이 모든 인증서 컨텍스트에 대한 메모리가 해제됩니다. 다중 스레드 프로그램과 같은 경우에 이 작업은 바람직하지 않습니다. CERT_CLOSE_STORE_CHECK_FLAG 설정되면 저장소가 닫히지만 참조 수가 0으로 줄어들지 않은 인증서에 메모리가 할당된 경우 함수에서 경고 값이 반환됩니다. 인증서의 참조 수가 0보다 크면 해당 인증서 컨텍스트의 중복이 해제되지 않습니다. CertFreeCertificateContext, CertFreeCRLContextCertFreeCTLContext를 사용하여 열려 있는 인증서를 해제합니다.

참고

인증서 컨텍스트는 다른 멤버 중에서 인코딩된 인증서 BLOB에 대한 포인터 및 CERT_INFO 구조체에 대한 포인터가 있는 CERT_CONTEXT 형식의 구조체입니다. CERT_INFO 구조에는 가장 중요한 인증서 데이터가 포함됩니다. 인증서, CRL(인증서 해지 목록) 및 CTL(인증서 신뢰 목록) 컨텍스트 구조에 대한 자세한 내용은 인증서 컨텍스트 인코딩 및 디코딩을 참조하세요.

각 인증서 컨텍스트에는 할당된 컨텍스트 주소의 복사본 수를 나타내는 참조 개수 도 포함됩니다. 인증서 컨텍스트가 어떤 방식으로든 중복될 때마다 해당 참조 수가 하나씩 증가합니다. 인증서 컨텍스트에 대한 포인터가 해제될 때마다 인증서 컨텍스트의 참조 수가 1씩 감소합니다. 인증서 컨텍스트에 대한 참조 수가 0에 도달하면 컨텍스트를 보유하는 메모리가 할당 해제됩니다. 인증서 컨텍스트에 할당된 메모리는 해당 컨텍스트가 저장소에 있고 저장소가 CERT_CLOSE_STORE_FORCE_FLAG 사용하여 닫혀 있을 때도 할당이 해제됩니다. 컨텍스트의 메모리가 할당 해제되고 해당 컨텍스트에 대한 포인터가 여전히 사용 중인 경우 해당 포인터는 더 이상 유효하지 않습니다.

 

CertDuplicateStore 는 저장소의 참조 횟수를 증가합니다.

CertSaveStore 는 저장소의 내용을 디스크 파일 또는 메모리 위치에 저장하고

CertControlStore 는 열려 있는 동안 저장소를 관리합니다. 열려 있는 저장소가 있는 애플리케이션은 다른 프로세스에 의해 해당 저장소의 지속형 상태가 변경된 경우 알림을 받을 수 있습니다. 이 문제는 도메인 제어 컴퓨터에서 로컬 컴퓨터 저장소에 새 인증서를 복사한 경우에 발생할 수 있습니다.

변경 내용이 검색되면 캐시된 저장소는 캐시된 저장소를 저장소의 지속된 상태와 일치하도록 다시 동기화할 수 있습니다. 또한 CertControlStore 는 캐시된 저장소의 이러한 변경 내용이 자동으로 저장되지 않을 때 캐시된 저장소 변경 내용을 영구 스토리지에 복사하는 프로세스도 지원합니다.

인증서 저장소와 유사한 인증서 컨텍스트에는 확장 속성이 있을 수 있습니다. CertSetStoreProperty 는 인증서 저장소에 확장 속성을 추가합니다. CertGetStoreProperty 는 인증서 저장소에 설정된 모든 속성을 검색합니다. 현재 미리 정의된 유일한 인증서 저장소 속성은 저장소의 지역화된 이름입니다.