Método ICertAdmin::RevokeCertificate (certadm.h)

El método RevokeCertificate revoca un certificado en una fecha especificada o inmediatamente. Este método se definió por primera vez en la interfaz ICertAdmin .

Un certificado revocado aparecerá en las listas de revocación de certificados (CRL) posteriores, siempre que la fecha de revocación sea efectiva en el momento en que se publicó la CRL.

Sintaxis

HRESULT RevokeCertificate(
  [in] const BSTR strConfig,
  [in] const BSTR strSerialNumber,
  [in] LONG       Reason,
  [in] DATE       Date
);

Parámetros

[in] strConfig

Representa una cadena de configuración válida para el servidor de la entidad de certificación (CA) con el formato COMPUTERNAME\CANAME, donde COMPUTERNAME es el nombre de red del servidor de Servicios de certificados y CANAME es el nombre común de la entidad de certificación, tal como se especifica durante la instalación de Servicios de certificados. Para obtener información sobre el nombre de la cadena de configuración, vea ICertConfig.

ImportanteRevokeCertificate no borra la memoria caché interna cuando se cambia la cadena de configuración. Al cambiar la cadena de configuración de la entidad de certificación, debe crear una instancia de un nuevo objeto ICertAdmin y llamar a este método de nuevo con la nueva cadena de configuración.
 

[in] strSerialNumber

Especifica un número de serie que identifica el certificado que se va a revocar. La cadena debe especificar el número de serie como un número par de dígitos hexadecimales. Si es necesario, se puede prefijar un cero al número para generar un número par de dígitos. Sin embargo, no se puede usar más de un cero inicial.

[in] Reason

Especifica el motivo de la revocación. Los siguientes valores (definidos en Wincrypt.h) son códigos de motivo admitidos.

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)

Puede restablecer un certificado revocado con el código de motivo de revocación de CRL_REASON_CERTIFICATE_HOLD llamando a RevokeCertificate con MAXDWORD como valor Reason . Tenga en cuenta que si se ha revocado un certificado con cualquier código de motivo distinto de CRL_REASON_CERTIFICATE_HOLD, no se puede restablecer.

[in] Date

Especifica la fecha, en hora universal coordinada (hora media de Greenwich), en la que la revocación entrará en vigor. El valor cero indica la hora universal coordinada actual, lo que provoca que un certificado se revoque inmediatamente. El valor de Date aparece en la columna Fecha de revocación efectiva del certificado revocado (en el complemento MMC de la entidad de certificación).

Valor devuelto

VB

Si el método se realiza correctamente, el método devuelve S_OK.

Si se produce un error en el método, devuelve un valor HRESULT que indica el error. Para obtener una lista de códigos de error comunes, consulte Valores HRESULT comunes.

Comentarios

Se puede llamar a este método más de una vez en el mismo certificado, lo que le permite cambiar la fecha de revocación efectiva y el motivo de revocación.

Si un certificado actualmente revocado tiene CRL_REASON_CERTIFICATE_HOLD como su código de motivo, puedes restablecer el certificado llamando a RevokeCertificate con MAXDWORD (definido en Winnt.h) como el valor de su código de motivo (el parámetro Reason ). Después de restablecerlo, el certificado no aparecerá en las CRL futuras.

Las tareas de administración usan DCOM. El código que llama a este método de interfaz tal como se define en una versión anterior de Certadm.h se ejecutará en servidores basados en Windows siempre que el cliente y el servidor ejecuten el mismo sistema operativo Windows.

Ejemplos

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

Requisitos

Requisito Value
Cliente mínimo compatible No se admite ninguno
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado certadm.h (incluya Certsrv.h)
Library Certidl.lib
Archivo DLL Certadm.dll

Consulte también

CCertAdmin

ICertAdmin

ICertAdmin2

ICertConfig