Метод ICertAdmin::RevokeCertificate (certadm.h)
Метод RevokeCertificate отменяет сертификат в указанную дату или немедленно. Этот метод был впервые определен в интерфейсе ICertAdmin .
Отозванный сертификат будет отображаться в последующих списках отзыва сертификатов при условии, что дата отзыва вступает в силу на момент публикации списка отзыва сертификатов.
Синтаксис
HRESULT RevokeCertificate(
[in] const BSTR strConfig,
[in] const BSTR strSerialNumber,
[in] LONG Reason,
[in] DATE Date
);
Параметры
[in] strConfig
Представляет допустимую строку конфигурации для сервера центра сертификации (ЦС) в формате 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)
Вы можете восстановить сертификат, отозванный с помощью CRL_REASON_CERTIFICATE_HOLD кода причины отзыва, вызвав RevokeCertificate с параметром MAXDWORD в качестве значения Reason . Обратите внимание, что если сертификат был отозван с любым кодом причины, кроме CRL_REASON_CERTIFICATE_HOLD, его невозможно восстановить.
[in] Date
Указывает дату в формате универсального времени по Гринвичу, когда отзыв вступает в силу. Нулевое значение указывает текущее время координированного времени, что приводит к немедленному отзыву сертификата. Значение Date отображается в столбце Дата действительного отзыва отозванного сертификата (в оснастке MMC центра сертификации).
Возвращаемое значение
VB
Если метод завершается успешно, метод возвращает S_OK.Если метод завершается сбоем, он возвращает значение HRESULT , указывающее на ошибку. Список распространенных кодов ошибок см. в разделе Общие значения HRESULT.
Комментарии
Этот метод можно вызвать несколько раз в одном сертификате, что позволяет изменить фактическую дату отзыва и причину отзыва.
Если в качестве кода причины для отозванного сертификата CRL_REASON_CERTIFICATE_HOLD, можно восстановить сертификат, вызвав RevokeCertificate с параметром MAXDWORD (определенный в Winnt.h) в качестве значения для его кода причины (параметр Reason ). После восстановления сертификат не будет отображаться в будущих списках отзыва сертификатов.
В задачах администрирования используется 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 |
Header | certadm.h (включая Certsrv.h) |
Библиотека | Certidl.lib |
DLL | Certadm.dll |