Encontre e exclua certificados raiz duplicados

1

Estamos em um domínio desconectado e acabamos de implementar certificados raiz atualizados por meio da política de grupo. Eu descobri agora, porém, que há vários certificados raiz duplicados na loja de usuários (e muitos mais para os meus, já que coloquei meu laptop on-line de vez em quando).

Estou procurando um script powershell para passar pelo armazenamento de certificado raiz e excluir quaisquer duplicatas nele.

Eu tenho isso até agora:

$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("Root","LocalMachine")
$store.Open("ReadWrite")
$rootcerts = Get-Childitem 'cert:\LocalMachine\root' -Recurse
$ht = @{}
$rootcerts  | foreach {$ht["$_"] += 1}
$duplicates = $ht.keys | where {$ht["$_"] -gt 1}

mas, depois, como deletar, as duplicatas me perderam.

    
por Andrew 25.11.2015 / 03:58

1 resposta

0

Em vez de atualizar uma contagem baseada no objeto cert, é necessário salvar mais informações sobre o certificado durante a iteração. Eu escolhi criar um mapa adicional de impressões digitais como chaves e os objetos certificados como valores. Portanto, a pesquisa é primeiro por assunto e, em seguida, por impressão digital.

Eu então removo os certificados mais antigos e deixo o mais novo.

$ht = @{}
Get-ChildItem -Recurse Cert:\LocalMachine\My |
    Where-Object { $_.Issuer -like "*MyIssuer*"  } |
    ForEach-Object {
        $subject = $_.Subject
        if (!$ht.ContainsKey($subject)) {
            $ht[$subject] = @{}
        }
        $ht[$subject]["$($_.Thumbprint)"] = $_
    }

$ht.Keys | ForEach-Object {
    $dupes = ($ht[$_] | Where-Object { $_.Count -gt 1 })
    if ($dupes) {
        $dupes.GetEnumerator() |
            Sort-Object [DateTime]"${Value.GetDateTimeString()}" -Descending |
            Select-Object -ExpandProperty Value -Skip 1 |
            ForEach-Object {
                if (Test-Path $_.PSPath) {
                    Remove-Item -Path $_.PSPath -DeleteKey
                }
            }
    }
}
    
por 17.05.2016 / 21:58