Powershell remotamente excluir certificados PKI

9

Eu recentemente reconstruí minha PKI e gostaria de excluir os certificados que foram emitidos para todas as máquinas clientes em toda a minha rede. Soa como um trabalho para o Powershell! Então, eu escrevi esse script para ser distribuído pelo GPO, executado a partir do SysVol e acionado em máquinas clientes na inicialização:

set-location cert:\LocalMachine\My
$certname = $env:COMPUTERNAME + ".domain.com"
get-item * | %{
if($_.issuer -like "CN=IssuingCA*" -and $_.DnsNameList.unicode -like $certname) { remove-item .\$_.Thumbprint -Force }
}

De um prompt de comando elevado:

  • Quando Ran, o script não fornece saída (simplesmente uma nova linha de terminal). isto não retorna nenhum erro e o certificado não é excluído.
  • Quando o argumento -WhatIf é adicionado ao comando Remove-Item em o script, novamente sem erros e o certificado não é excluído.
  • Quando Remove-Item. \ CERTIFICATE-THUMBPRINT -Force é executado, o certificado é eliminado.

Isso é um problema de permissão? Existe uma maneira mais inteligente / simples de fazer isso?

Obrigado!

    
por Byron C. 09.07.2014 / 01:32

2 respostas

6

Minha resposta é para "Existe uma maneira mais inteligente / simples de fazer isso?" parte da sua pergunta. Este script foi bem sucedido na remoção de um certificado de papai para mim

$Path = 'Cert:\LocalMachine\AuthRoot\'
$CertList = @()

$CertList = Get-ChildItem -Path $Path | Where-Object {$_.Issuer -like "CN=GO*"}

foreach($Cert in $CertList){
    remove-item "$($Path)$($Cert.Thumbprint)" -Force -WhatIf
}

Adicionei -WhatIf para que esse código não seja perigoso para o folx "copy \ paste \ run". Agora, você precisará adaptar o $Path , Where-Object e adicionar a variável $certname , mas o modelo acima deve estar funcionando.

    
por 11.07.2014 / 20:37
3

Embora não tenha conseguido resolver o problema com o script, consegui encontrar um ' Modo mais inteligente / simples de alcançar meu objetivo .

Da autoridade de certificação:

  • Rt-Click Certificate Templates e selecione Manage
  • Rt-Click no Modelo de Certificado que você deseja substituir e selecione Reenroll All Certificate Holders

Isso aumentará o número da versão do modelo e os sistemas de rede com inscrição automática excluirão o certificado antigo e se inscreverão no novo certificado.

Embora isso exija inscrição automática para o modelo específico com o qual estou trabalhando, uma solução para o script publicado seria uma resposta preferível.

    
por 09.07.2014 / 19:41