Partilhar via


Manipuladores de extensão

A partir de formato de certificado X.509 versão 3, um certificado pode conter extensões de certificado. (Para obter o conteúdo de um certificado X.509, consulte Propriedades do certificado.) Estas extensões indicam informações adicionais. Por exemplo, uma extensão pode indicar informações adicionais de identificação do assunto ou pode indicar informações de uso de chave, que especificam as tarefas (como assinatura ou criptografia) para as quais uma chave pode ser usada. Um conjunto de extensões padrão é definido para uso do aplicativo, e as extensões também podem ser personalizadas.

Cada extensão tem uma cadeia de caracteres de identificador de objeto associada que identifica o tipo de informações adicionais e uma estrutura de dados que contém essas informações. Por exemplo, o identificador de objeto de uso de chave é "2.5.29.15", que indica informações de uso de chave. Sua estrutura de dados associada é um CRYPT_BIT_BLOB (bitfield) especificando como a chave pode ser usada.

Uma extensão pode ser adicionada a um certificado antes de ser emitida. Quando o certificado é emitido, todas as extensões habilitadas fazem parte do certificado. Se uma extensão for marcada como crítica, seu uso deve ser conhecido pelo aplicativo que usa e o aplicativo deve aderir à intenção ou ao valor da extensão. Os Serviços de Certificados permitem que as extensões sejam definidas em um certificado não emitido por meio de métodos fornecidos pelo ICertAdmin e ICertServerPolicy. Para obter detalhes sobre extensões de certificado, consulte CERT_EXTENSION na documentação da CryptoAPI. Para obter informações sobre estruturas de dados de extensão de certificado comuns, consulte X.509 Certificate Extension Structures.

O manipulador de extensão é um objeto COM que fornece rotinas para codificar as extensões e tipos de dados mais complexos, mas comumente usados, como IA5String ou PrintableString.

As extensões que têm os tipos de dados DATE, LONGe BSTR não requerem um manipulador de extensão. O módulo de política simplesmente chama ICertServerPolicy::SetCertificateExtension com o parâmetro Type definido como um valor que representa o tipo de dados de extensão: PROPTYPE_DATE, PROPTYPE_LONG ou PROPTYPE_STRING. Em seguida, ele passa a extensão para o mecanismo do servidor. O mecanismo de servidor, por sua vez, executa a codificação ASN.1 (Abstract Syntax Notation One antes de armazenar a extensão no certificado.

No entanto, as extensões que têm tipos de dados diferentes desses tipos padrão devem ser codificadas ASN.1 por um manipulador de extensão antes que o módulo de política as passe para o mecanismo do servidor. Quando o módulo de política chama ICertServerPolicy::SetCertificateExtension para passar uma extensão codificada em ASN.1 para o mecanismo do servidor, ele deve definir o parâmetro Tipo como PROPTYPE_BINARY. O mecanismo do servidor, em seguida, simplesmente armazena essa extensão codificada no certificado.

O manipulador de extensão padrão, Certenc.dll, exporta várias interfaces de ICertEncodeXXX e pode ser chamado pelo módulo de política. As informações de tipo necessárias também estão contidas no Certencl.dll que é fornecido no Platform Software Development Kit (SDK). Cada interface fornece um método Encode que retorna uma extensão de certificado codificada em ASN.1 para o módulo de política em um formato binário. O módulo de política pode então definir a extensão em um certificado chamando o ICertServerPolicy::SetCertificateExtension método.

Para obter mais informações, consulte Escrevendo manipuladores de extensão personalizados.