Custom OID em Templates de Certificado (ADCS): por que existem dois OIDs, quando remover e como adotar seu PEN com segurança

Ao duplicar um template no ADCS, é comum surgirem dois OIDs na partição de configuração e um deles parecer “órfão”. Neste guia, explico por que isso acontece, quando é seguro removê‑lo e como adotar OIDs próprios sob o seu PEN com governança e compatibilidade.

Índice

Contexto e motivação

Organizações que usam Active Directory Certificate Services (ADCS) frequentemente duplicam templates para atender cenários de autenticação, assinatura de código, TLS interno ou S/MIME. Nesse processo, administradores percebem, via ADSI Edit ou ferramentas de inventário, que dois objetos relacionados a OID aparecem na partição de configuração. Um deles desaparece ao excluir o template recém‑criado; o outro permanece. Isso levanta três dúvidas práticas: “por que existem dois?”, “posso usar OIDs do meu Private Enterprise Number (PEN)?” e “é seguro apagar o OID que ficou?”.

Resumo rápido para decisão

AspectoResposta resumida
Por que existem dois objetos OID?Ao duplicar um template, o AD cria: (A) um objeto associado ao template (mapeador do OID do template) e (B) um objeto de OID “genérico” sob o contêiner de OIDs (Enterprise OID), reutilizável por políticas e EKUs. O segundo pode permanecer para preservar referências e não é limpo automaticamente.
É seguro substituir o OID padrão por um PEN próprio?Sim, é boa prática quando você cria novos OIDs (para templates, EKUs ou políticas internas). Siga a árvore do seu PEN, garanta compatibilidade com sistemas que consomem os certificados e mantenha uma governança rígida para evitar colisões.
O que fazer com o segundo OID “órfão”?Investigue dependências (EKUs, políticas, certificados emitidos, NPS/NDES/serviços) antes de remover. Se não houver vínculos, a exclusão manual é aceitável, idealmente após backup/snapshot da partição de configuração e com plano de reversão.

Entendendo onde os OIDs “moram” no AD

No AD, os elementos de PKI ficam na partição de configuração, em especial dentro de CN=Public Key Services,CN=Services, (ConfigurationNC). Simplificando:

  • Templates de certificado residem em CN=Certificate Templates,CN=Public Key Services,... e carregam, entre outros atributos, o msPKI-Cert-Template-OID, que identifica de forma única o template.
  • Objetos de OID de empresa residem em CN=OID,CN=Public Key Services,... e representam OIDs reutilizáveis (inclusive para Application Policies/EKUs e políticas de emissão).

Essa separação explica por que você vê “dois objetos” quando duplica um template: um é o próprio template com seu OID; o outro é o objeto de OID empresarial correspondente no contêiner de OIDs.

O que acontece ao duplicar um template

  1. Você duplica um template existente (por exemplo, Kerberos Authentication) e salva como NEW_KerberosAuthentication.
  2. O ADCS atribui um novo valor para msPKI-Cert-Template-OID desse template duplicado e registra (ou reaproveita) um objeto correspondente no contêiner CN=OID.
  3. O objeto de OID empresarial recebe, tipicamente, o mesmo displayName do template no momento da criação, servindo como “âncora” para referências por EKUs/políticas que apontem para aquele OID.

Se você excluir o template, o objeto do template some. Já o objeto do OID empresarial pode ficar — e isso é desejado quando ainda existirem referências (por exemplo, certificados emitidos contendo aquele OID no EKU).

Por que o segundo OID permanece

O objeto de OID empresarial funciona como um catálogo corporativo de OIDs. Ele pode ser referenciado por:

  • EKUs (Application Policies) usados por templates diferentes;
  • Políticas de emissão ou de registro (RA);
  • Serviços integrados (NPS, NDES/SCEP, proxies TLS internos), que verificam OIDs específicos;
  • Ferramentas de terceiros (inspeção TLS, MDM, leitores de cartão), que validam OIDs durante a autenticação.

Como essas referências podem existir fora do escopo do template que você acabou de remover, o AD não elimina automaticamente o OID empresarial. Isso evita que certificados já emitidos “percam” a sua semântica.

Quando (e como) usar o seu PEN

Se a sua organização possui um PEN (Private Enterprise Number), usar OIDs sob esse PEN em novas definições é uma boa prática, pois:

  • Garante unicidade global dos seus OIDs;
  • Evita sobrecarga de OIDs “genéricos”/reservados;
  • Facilita governança e auditoria interna.

Regras práticas:

  • Não substitua EKUs padrão da indústria (por exemplo, Client Authentication, Server Authentication) quando o objetivo é interoperabilidade com software de mercado. Esses OIDs públicos devem permanecer.
  • Crie OIDs sob o seu PEN para novos EKUs/políticas internas ou para novos templates com semântica proprietária (como autenticação baseada em atributos internos, carimbos de tempo internos, etc.).
  • Evite “migrar” OIDs de templates amplamente implantados sem um plano de coexistência, para não invalidar workloads que já esperam o OID antigo.

Exemplo de árvore de OID sob um PEN corporativo

UsoExemplo de arcoObservações
Templates de certificado1.3.6.1.4.1.<PEN>.1.xx sequencial por família de template; documentar displayName e proprietário.
EKUs internos1.3.6.1.4.1.<PEN>.2.xSeparar EKUs de emissão e de uso final; mapear “friendly name” de cada OID.
Políticas de emissão1.3.6.1.4.1.<PEN>.3.xÚtil quando restrições de políticas fazem parte de auditorias.

Passo a passo para adoção de OIDs próprios

  1. Desenhe a árvore de OIDs do seu PEN e publique um documento interno com propósito, dono e ciclo de vida de cada arco.
  2. Crie os objetos de OID no AD sob CN=OID (com displayName e descrição claros). Isso facilita referência e evita “colisões de significado”.
  3. Associe EKUs nos templates que precisarem de políticas/semânticas internas. Para interoperabilidade, mantenha também os EKUs padrão quando necessário.
  4. Implemente testes em todos os consumidores (NPS, IIS/HTTP.sys, aplicações, MDM, VPN, etc.).
  5. Documente o mapeamento OID ⇄ friendly name para equipes internas e fornecedores.

Investigando o “segundo OID” que ficou

Antes de remover qualquer objeto em CN=OID, siga um roteiro de triagem para descobrir dependências reais:

Checklist de investigação

  • Mapeie o OID: anote o valor numérico (ex.: 1.3.6.1.4.1.99999.2.10) e o displayName.
  • Procure templates que usem esse OID: além de msPKI-Cert-Template-OID no próprio template, verifique se o OID aparece em EKUs do template.
  • Vasculhe serviços: NPS (RADIUS), NDES/SCEP, proxies TLS, serviços web, gateways VPN. Muitos validam EKUs/OIDs.
  • Inspecione o banco da CA: certifique-se se há certificados emitidos recentemente que incluam esse OID.
  • Converse com donos de aplicações: às vezes o OID foi pactuado com um time de app/segurança e ainda está ativo.

Comandos úteis em PowerShell

Dica: execute com privilégios adequados e em um host com RSAT (módulo ActiveDirectory) instalado.

$ConfigNC   = (Get-ADRootDSE).configurationNamingContext
$PKIBase    = "CN=Public Key Services,CN=Services,$ConfigNC"
$TplBase    = "CN=Certificate Templates,$PKIBase"
$OIDBase    = "CN=OID,$PKIBase"

Listar templates e seus OIDs

Get-ADObject -LDAPFilter "(objectClass=pKICertificateTemplate)" \`
-SearchBase \$TplBase -Properties displayName,msPKI-Cert-Template-OID |
Select-Object displayName, @{n='TemplateOID';e={$\_.'msPKI-Cert-Template-OID'}} |
Sort-Object displayName

Listar OIDs empresariais

Get-ADObject -LDAPFilter "(objectClass=msPKI-Enterprise-Oid)" \`
-SearchBase \$OIDBase -Properties displayName,msPKI-OID,description |
Select-Object displayName, @{n='OID';e={$\_.'msPKI-OID'}}, description |
Sort-Object displayName

Procurar objetos que tenham um OID específico

\$TargetOID = "1.3.6.1.4.1.99999.2.10"
Get-ADObject -LDAPFilter "(|(msPKI-Cert-Template-OID=\$TargetOID)(msPKI-OID=\$TargetOID))" \`
-SearchBase \$PKIBase -Properties \* |
Select-Object name, objectClass, distinguishedName 

Interpretação: se o OID aparecer em EKUs de templates, políticas ou outros objetos, considere esse OID “em uso”.

Inspecionando a CA e certificados emitidos

Na CA, você pode usar certutil para localizar certificados que carregam determinado OID no EKU (ou filtrar por template). Alguns comandos práticos:

# Listar templates conhecidos pela CA
certutil -catemplates

Pesquisar por um template específico na base da CA

certutil -view -restrict "CertificateTemplate=NEW\_KerberosAuthentication"

Dump de um certificado (substitua pelo SerialNumber)

certutil -dump \ 

Se encontrar certificados recentes ou ativos que contenham o OID alvo em seus EKUs, não remova o OID empresarial correspondente ainda; planeje a transição.

Processo seguro para remoção de um OID empresarial

Se a investigação indicar ausência de dependências, siga um fluxo de baixo risco:

  1. Backup/snapshot: garanta System State ou snapshot da VM do DC (ou snapshots do AD via ferramentas aprovadas). Se a Lixeira do AD estiver habilitada, melhor ainda.
  2. Marque o objeto: antes de excluir, considere prefixar o displayName com [DEPRECATED] e aguarde um ciclo (ex.: duas semanas) para observar se surge alguma reclamação.
  3. Remova com PowerShell (após o período de observação):
$obj = Get-ADObject -LDAPFilter "(msPKI-OID=$TargetOID)" -SearchBase $OIDBase
if ($obj) {
  Remove-ADObject -Identity $obj.DistinguishedName -Confirm:$false
}

Rollback: se necessário, restaure via Recycle Bin do AD ou a partir de backup/snapshot.

Boas práticas de governança de OIDs

  • Inventário centralizado: mantenha uma planilha ou repositório com cada OID, dono, propósito, status (ativo/obsoleto), data e impacto.
  • Nunca reutilize OIDs: um OID aposentado deve permanecer reservado para sempre; reaproveitar quebra a semântica de certificados antigos.
  • Delegação controlada: somente um grupo restrito pode criar/atribuir OIDs e templates. Revise solicitações com um CAB (Change Advisory Board) ou processo de RFC interno.
  • Nomes amigáveis consistentes: defina padrões de displayName e friendly name (ex.: ORG UserAuth v2) e evite abreviações obscuras.
  • Ciclo de vida documentado: para cada OID, descreva criação, teste, produção, descontinuação e plano de migração.

Compatibilidade e testes

Introduzir um OID próprio pode afetar cadeias de validação. Antes de ir a produção:

  • Testes de autenticação com NPS, VPN, proxies, gateways e controladores de domínio (para smart card logon e Kerberos, quando aplicável).
  • Testes de cliente com navegadores, sistemas operacionais e bibliotecas criptográficas comuns (OpenSSL, Schannel, NSS), garantindo que o EKU/OID seja aceito.
  • Compatibilidade móvel/MDM: perfis de certificação em iOS/Android podem exigir EKUs específicos. Inclua OIDs padrão além dos internos quando necessário.

Modelos de comunicação e documentação

Para evitar fricção entre times, inclua no seu repositório interno:

  • Mapa OID ⇄ friendly name ⇄ sistema/aplicação que consome;
  • Exemplos de CSR e OpenSSL config para desenvolvedores;
  • Passos de diagnóstico (certutil, openssl x509 -text) para suporte de primeiro nível;
  • Guia de rollback em caso de incidentes.

Erros comuns e como evitar

  • Confundir EKU padrão com OID interno: não substitua OIDs do padrão IETF/CA/B se busca interoperabilidade.
  • Excluir OID em uso por engano: sempre pesquise por referências (templates, CA, serviços) e use um período de observação com [DEPRECATED].
  • Reutilizar OID “livre”: um OID que já apareceu em produção nunca deve ser reaproveitado.
  • Governança frouxa: sem um catálogo e um dono por OID, colisões e retrabalho são inevitáveis.

Exemplo de fluxo de criação de um novo EKU interno sob seu PEN

  1. Definir o propósito: “Autenticação de usuários em rede interna com MFA”.
  2. Alocar OID: 1.3.6.1.4.1.<PEN>.2.20.
  3. Criar objeto em CN=OID com nome amigável e descrição (time responsável, contato, data, ambientes).
  4. Configurar template adicionando o novo EKU além dos EKUs padrão necessários.
  5. Homologar em piloto com NPS/VPN e aplicações críticas.
  6. Auditar após o corte para validar que apenas certificados com o novo EKU são aceitos onde esperado.

Snippet de automação para criar um OID empresarial

Exemplo ilustrativo de criação de um objeto de OID — ajuste nomes, OID e descrição conforme o seu padrão interno:

$ConfigNC = (Get-ADRootDSE).configurationNamingContext
$OIDBase  = "CN=OID,CN=Public Key Services,CN=Services,$ConfigNC"

\$NewOIDValue = "1.3.6.1.4.1.99999.2.20"
\$Display     = "ORG UserAuth EKU"
\$Desc        = "EKU interno para autenticação de usuários; Owner: Time PKI; Contato: [pki@org.exemplo](mailto:pki@org.exemplo)"

New-ADObject -Name \$Display `  -Type "msPKI-Enterprise-Oid"`
-Path \$OIDBase \`
-OtherAttributes @{
"displayName" = \$Display
"msPKI-OID"   = \$NewOIDValue
"description" = \$Desc
} 

Observação: este exemplo cria o objeto de OID empresarial. A associação aos templates e a propagação para a CA devem ser feitas nos consoles apropriados e validadas com testes.

FAQ objetivo

Posso “editar” o OID de um template existente em massa?
O OID do template é a identidade lógica do próprio template. Para mudanças com compatibilidade, crie um novo template (com novo OID), migre consumidores e aposente o antigo.

É seguro apagar um OID empresarial sem verificar a CA?
Não. Sempre verifique a base da CA e os serviços consumidores. OIDs podem estar presentes em certificados ativos e políticas de acesso.

Preciso registrar friendly names no Windows?
Sim, friendly names consistentes ajudam na administração e troubleshooting. Padronize-os no AD e, quando aplicável, em hosts que exibem OIDs para operadores.

Conclusão

O “segundo OID” que permanece após a exclusão de um template não é um bug, mas um artefato de design do ADCS para permitir reutilização e preservar referências. Remova‑o apenas se não houver dependências ativas, preferencialmente após um período de observação e com backup/rollback planejados. Por outro lado, adotar OIDs sob o seu PEN é uma prática recomendada para novos EKUs/políticas/templates internos, desde que você garanta compatibilidade, documentação e governança de ponta a ponta.


Índice