Поделиться через


Метод 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.

Важно!RevokeCertificate не очищает внутренний кэш при изменении строки конфигурации. При изменении строки конфигурации для ЦС необходимо создать экземпляр нового объекта 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)

Вы можете восстановить сертификат, отозванный с помощью 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

См. также раздел

CCertAdmin

ICertAdmin

ICertAdmin2

ICertConfig