Powershell Eliminar remotamente los certificados PKI

9

Recientemente reconstruí mi PKI y me gustaría eliminar los certificados que se emitieron a todas las máquinas cliente en mi red. ¡Suena como un trabajo para Powershell! Así que escribí este script para que GPO lo distribuyera, ejecuté desde SysVol y lo activé en las máquinas cliente al inicio:

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 }
}

Desde un símbolo del sistema elevado:

  • Cuando Ran, el script no da salida (simplemente una nueva línea de terminal). No devuelve errores y el Certificado no se elimina.
  • Cuando el argumento -WhatIfse agrega al Remove-Itemcomando en el script, nuevamente no hay errores y el Certificado no se elimina.
  • Cuando se ejecuta Remove-Item. \ CERTIFICATE-THUMBPRINT -Force, se elimina el certificado.

¿Es esto un problema de permisos? ¿Hay una manera más inteligente / simple de hacer esto?

¡Gracias!

Byron C.
fuente
1
intentaste remove-item -whatif??
MDMoore313
@BigHomie. Sí, lo intenté. Parece que eliminé esa información en una edición ...
Byron C.
1
En su bloque de código condicional, agregue a write-hostpara volcar algo en la pantalla si el condicional es verdadero. Me pregunto si el script está evaluando como falso (explicaría el error y la falta de acción).
Colyn1337
@ Colyn1337 Sí. Está evaluando Verdadero.
Byron C.
@ByronC. ¿Qué sucede si el bloque de código es justo Remove-Item -Force?
Colyn1337

Respuestas:

6

Mi respuesta es para "¿Hay una manera más inteligente / simple de hacer esto?" parte de tu pregunta Este script tuvo éxito al eliminar un certificado de go daddy para mí

$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
}

-WhatIfAgregué un código para que este código no fuera peligroso para el folx "copiar \ pegar \ ejecutar". Ahora, necesitará adaptar el $Path, Where-Objecty agregar la $certnamevariable, pero la plantilla anterior debería ayudarlo.

Colyn1337
fuente
3

Aunque no he podido resolver el problema con el script, pude encontrar una forma 'más inteligente / simple' para lograr mi objetivo .

De la Autoridad de Certificación:

  • Rt-Click Certificate Templatesy seleccionaManage
  • Rt-Haga clic en la plantilla de certificado que desea reemplazar y seleccione Reenroll All Certificate Holders

Esto aumentará el número de versión de la plantilla y los sistemas de red con inscripción automática eliminarán el certificado anterior y se inscribirán con el nuevo certificado.

Aunque esto requiere una inscripción automática para la plantilla específica con la que estoy trabajando, una solución al script publicado sería una respuesta preferible.

Byron C.
fuente