Compartilhar via


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

O método RevokeCertificate revoga um certificado em uma data especificada ou imediatamente. Esse método foi definido pela primeira vez na interface ICertAdmin .

Um certificado revogado aparecerá em uma crls ( listas de revogação de certificado ) subsequentes, desde que a data de revogação seja efetivada no momento em que a CRL foi publicada.

Sintaxe

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

Parâmetros

[in] strConfig

Representa uma cadeia de caracteres de configuração válida para o servidor de autoridade de certificação (CA) no formulário COMPUTERNAME\CANAME, em que COMPUTERNAME é o nome de rede do servidor de Serviços de Certificados e CANAME é o nome comum da autoridade de certificação, conforme inserido durante a instalação dos Serviços de Certificados. Para obter informações sobre o nome da cadeia de caracteres de configuração, consulte ICertConfig.

ORevokeCertificate importante não limpa o cache interno quando a cadeia de caracteres de configuração é alterada. Ao alterar a cadeia de caracteres de configuração para a AC, você deve instanciar um novo objeto ICertAdmin e chamar esse método novamente com a nova cadeia de caracteres de configuração.
 

[in] strSerialNumber

Especifica um número de série que identifica o certificado a ser revogado. A cadeia de caracteres deve especificar o número de série como um número par de dígitos hexadecimal. Se necessário, um zero pode ser prefixado no número para produzir um número par de dígitos. No entanto, não mais de um zero à esquerda pode ser usado.

[in] Reason

Especifica o motivo da revogação. Os valores a seguir (definidos em Wincrypt.h) têm suporte para códigos de motivo.

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)

Você pode restabelecer um certificado revogado com o código de motivo de revogação CRL_REASON_CERTIFICATE_HOLD chamando RevokeCertificate com MAXDWORD como o valor Reason . Observe que, se um certificado tiver sido revogado com qualquer código de motivo diferente de CRL_REASON_CERTIFICATE_HOLD, ele não poderá ser restabelecido.

[in] Date

Especifica a data, em Tempo Universal Coordenado (Hora Média de Greenwich), na qual a revogação entrará em vigor. O valor zero indica o Tempo Universal Coordenado atual, fazendo com que um certificado seja revogado imediatamente. O valor de Date aparece na coluna Data de Revogação Efetiva do certificado revogado (no snap-in MMC da Autoridade de Certificação).

Retornar valor

VB

Se o método for bem-sucedido, o método retornará S_OK.

Se o método falhar, ele retornará um valor HRESULT que indica o erro. Para obter uma lista de códigos de erro comuns, consulte Valores HRESULT comuns.

Comentários

Esse método pode ser chamado mais de uma vez no mesmo certificado, o que permite alterar a data de revogação efetiva e o motivo da revogação.

Se um certificado revogado no momento tiver CRL_REASON_CERTIFICATE_HOLD como seu código de motivo, você poderá restabelecer o certificado chamando RevokeCertificate com MAXDWORD (definido em Winnt.h) como o valor de seu código de motivo (o parâmetro Reason ). Depois que ele for restabelecido, o certificado não aparecerá em CRLs futuras.

As tarefas de administração usam o DCOM. O código que chama esse método de interface conforme definido em uma versão anterior do Certadm.h será executado em servidores baseados no Windows, desde que o cliente e o servidor estejam executando o mesmo sistema operacional Windows.

Exemplos

    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 Valor
Cliente mínimo com suporte Nenhum compatível
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho certadm.h (inclua Certsrv.h)
Biblioteca Certidl.lib
DLL Certadm.dll

Confira também

CCertAdmin

ICertAdmin

ICertAdmin2

ICertConfig