다음을 통해 공유


ICertAdmin::RevokeCertificate 메서드(certadm.h)

RevokeCertificate 메서드는 지정된 날짜 또는 즉시 인증서를 해지합니다. 이 메서드는 ICertAdmin 인터페이스에서 처음 정의되었습니다.

해지 날짜가 CRL이 게시될 때 유효하면 해지된 인증서가 후속 CRL( 인증서 해지 목록 )에 표시됩니다.

구문

HRESULT RevokeCertificate(
  [in] const BSTR strConfig,
  [in] const BSTR strSerialNumber,
  [in] LONG       Reason,
  [in] DATE       Date
);

매개 변수

[in] strConfig

COMPUTERNAME\CANAME 형식의 CA( 인증 기관 ) 서버에 대한 유효한 구성 문자열을 나타냅니다. 여기서 COMPUTERNAME은 인증서 서비스 서버의 네트워크 이름이고 CANAME는 인증서 서비스 설정 중에 입력한 인증 기관의 일반 이름입니다. 구성 문자열 이름에 대한 자세한 내용은 ICertConfig를 참조하세요.

중요RevokeCertificate 는 구성 문자열이 변경되면 내부 캐시를 지우지 않습니다. CA에 대한 구성 문자열을 변경하는 경우 새 ICertAdmin 개체를 인스턴스화하고 새 구성 문자열을 사용하여 이 메서드를 다시 호출해야 합니다.
 

[in] strSerialNumber

해지할 인증서를 식별하는 일련 번호를 지정합니다. 문자열은 일련 번호를 짝수 16진수로 지정해야 합니다. 필요한 경우 숫자 앞에 0을 접두사로 추가하여 짝수의 숫자를 생성할 수 있습니다. 그러나 선행 0을 둘 이상 사용할 수 없습니다.

[in] Reason

해지 이유를 지정합니다. 다음 값(Wincrypt.h에 정의됨)은 지원되는 이유 코드입니다.

CRL_REASON_UNSPECIFIED(0)

CRL_REASON_KEY_COMPROMISE (1)

CRL_REASON_CA_COMPROMISE (2)

CRL_REASON_AFFILIATION_CHANGED (3)

CRL_REASON_SUPERSEDED (4)

CRL_REASON_CESSATION_OF_OPERATION (5)

CRL_REASON_CERTIFICATE_HOLD (6)

MAXDWORD를 사용하여 RevokeCertificate 를 Reason 값으로 호출하여 CRL_REASON_CERTIFICATE_HOLD 해지 이유 코드로 해지된 인증서를 복원할 수 있습니다. 인증서가 CRL_REASON_CERTIFICATE_HOLD 이외의 이유 코드로 해지된 경우 복원할 수 없습니다.

[in] Date

해지를 적용할 날짜를 협정 세계시(그리니치 표준시)로 지정합니다. 값 0은 현재 협정 세계시임을 나타내며, 이로 인해 인증서가 즉시 해지됩니다. Date 값은 해지된 인증서의 유효 해지 날짜 열(인증 기관 MMC 스냅인)에 표시됩니다.

반환 값

VB

메서드가 성공하면 메서드는 S_OK 반환합니다.

메서드가 실패하면 오류를 나타내는 HRESULT 값이 반환됩니다. 일반적인 오류 코드 목록은 일반적인 HRESULT 값을 참조하세요.

설명

이 메서드는 동일한 인증서에서 두 번 이상 호출할 수 있으므로 유효 해지 날짜 및 해지 이유를 변경할 수 있습니다.

현재 해지된 인증서가 해당 이유 코드로 CRL_REASON_CERTIFICATE_HOLD 경우 MAXDWORD(Winnt.h에 정의됨)로 RevokeCertificate 를 해당 이유 코드의 값( Reason 매개 변수)으로 호출하여 인증서를 복원할 수 있습니다. 복원된 후 인증서는 이후 CRL에 표시되지 않습니다.

관리 작업은 DCOM을 사용합니다. 이전 버전의 Certadm.h에 정의된 대로 이 인터페이스 메서드를 호출하는 코드는 클라이언트와 서버가 모두 동일한 Windows 운영 체제를 실행하는 한 Windows 기반 서버에서 실행됩니다.

예제

    BSTR bstrCA = NULL;
    BSTR bstrSerial = NULL;  // certificate serial number
    long nReason;
    DATE RevokeDate;         // revocation date
    SYSTEMTIME st;

    bstrSerial = SysAllocString(L"<SERIALNUMBERHERE>");
    bstrCA = SysAllocString(L"<COMPUTERNAMEHERE>\\<CANAMEHERE>");
    if (NULL == bstrCA || NULL == bstrSerial)
    {
        printf("Memory allocation failed\n");
        goto error;
    }
    
    nReason = CRL_REASON_AFFILIATION_CHANGED;  // Defined
	                                      // in Wincrypt.h

    //  Specify when the cert should be revoked.
    //  Note: To revoke immediately, set RevokeDate to zero.
    //  This example sets the revoke date to noon on 1/1/2001.
    //  Zero out values first (avoids setting minutes, seconds,
    //  and so on).
    memset(&st, 0, sizeof(SYSTEMTIME));
    st.wYear = 2001;
    st.wMonth = 1;     // Jan
    st.wDay = 1;       // 1st day of month
    st.wHour = 12;     // Noon

    //  Place the date in the required format.
    if (!SystemTimeToVariantTime(&st, &RevokeDate))
    {
        printf("Unable to convert time.\n");
        goto error;
    }

    //  Revoke the certificate.
    //  pCertAdmin is a previously instantiated ICertAdmin object.
    hr = pCertAdmin->RevokeCertificate( bstrCA,
                                        bstrSerial,
                                        nReason,
                                        RevokeDate );
    if (FAILED(hr))
    {
        printf("Failed RevokeCertificate. [%x]\n", hr);
        goto error;
    }
    else
        printf("Certificate %ws revoked.\n", bstrSerial );

    //  Done processing.

error:

    //  Free resources.
    if (bstrSerial)
        SysFreeString( bstrSerial );
    if (bstrCA)
        SysFreeString( bstrCA );

요구 사항

요구 사항
지원되는 최소 클라이언트 지원되는 버전 없음
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 certadm.h(Certsrv.h 포함)
라이브러리 Certidl.lib
DLL Certadm.dll

추가 정보

CCertAdmin

ICertAdmin

ICertAdmin2

ICertConfig