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

表示 证书颁发机构 (CA) 服务器的有效配置字符串,格式为 COMPUTERNAME\CANAME,其中 COMPUTERNAME 是证书服务服务器的网络名称,CANAME 是证书颁发机构的公用名称,如证书服务设置过程中输入。 有关配置字符串名称的信息,请参阅 ICertConfig

重要提示RevokeCertificate 不会在配置字符串更改时清除内部缓存。 更改 CA 的配置字符串时,必须实例化新的 ICertAdmin 对象,并使用新的配置字符串再次调用此方法。
 

[in] strSerialNumber

指定要吊销的证书的序列号。 字符串必须将序列号指定为十六进制数字的偶数。 如有必要,可以将零作为数字前缀,以生成偶数位数。 但是,不能使用超过一个前导零。

[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

以协调世界时 (格林威治平均时间) 指定吊销生效的日期。 值零表示当前协调世界时,导致证书立即吊销。 Date 的值显示在证书颁发机构 MMC 管理单元) 中吊销证书 (的有效吊销日期列中。

返回值

VB

如果方法成功,该方法将返回S_OK。

如果方法失败,它将返回一个 指示错误的 HRESULT 值。 有关常见错误代码的列表,请参阅 通用 HRESULT 值

注解

可以在同一证书上多次调用此方法,这样就可以更改有效的吊销日期和吊销原因。

如果当前吊销的证书具有CRL_REASON_CERTIFICATE_HOLD作为原因代码,则可以调用 RevokeCertificate ,其中 MAXDWORD (Winnt.h) 中定义为其原因代码的值 (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)
Library Certidl.lib
DLL Certadm.dll

另请参阅

CCertAdmin

ICertAdmin

ICertAdmin2

ICertConfig