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