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