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 を 1 つ以上使用することはできません。

[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)

CRL_REASON_CERTIFICATE_HOLD失効理由コードを使用して失効した証明書を復元するには、理由値として MAXDWORD を使用して RevokeCertificate を呼び出します。 証明書がCRL_REASON_CERTIFICATE_HOLD以外の理由コードで取り消された場合、証明書を復元できないことに注意してください。

[in] Date

失効が有効になる日付を協定世界時 (グリニッジ標準時) で指定します。 値 0 は現在の協定世界時を示し、証明書はすぐに取り消されます。 Date の値は、失効した証明書の [有効な失効日] 列 (証明機関 MMC スナップイン) に表示されます。

戻り値

VB

メソッドが成功した場合、メソッドは S_OKを返します。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。 一般的なエラー コードの一覧については、「 共通の HRESULT 値」を参照してください。

注釈

このメソッドは、同じ証明書で複数回呼び出すことができます。これにより、有効な失効日と失効理由を変更できます。

現在失効している証明書が理由コードとしてCRL_REASON_CERTIFICATE_HOLD場合は、理由コード (Reason パラメーター) の値として MAXDWORD (Winnt.h で定義) を使用して RevokeCertificate を呼び出すことによって、証明書を復元できます。 復元後、証明書は今後の 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 を含む)
Library Certidl.lib
[DLL] Certadm.dll

こちらもご覧ください

CCertAdmin

ICertAdmin

ICertAdmin2

ICertConfig