Tengo un proveedor que se queja de que los certificados raíz de confianza en nuestros varios sistemas de servidor de Windows (2008, 2012, 2016, 2019) están desactualizados. No pude demostrar lo contrario. Por supuesto, "Desactivar la actualización automática de certificados" no está configurado en ninguno de esos sistemas y, por lo tanto, el almacenamiento raíz debe actualizarse.

Primera pregunta: De todos modos, ¿existe una forma automatizada simple (o incluso una herramienta ingeniosa) que compararía los certificados raíz de confianza instalados reales en un sistema Windows con la raíz de confianza más reciente en Internet?

pude

  • descargue los últimos certificados raíz con "certutil -generateSSTFromWU WURoots.sst"
  • haga algo de magia con los comandos de PowerShell * CERT * (consulte "Get-Command * CERT *")
  • comparar números de serie, huellas digitales, etc.

Sin embargo, no soy realmente un programador.

¿Quizás hay una herramienta alrededor de la cual haría lo que necesito?

Segunda pregunta: además de comparar, ¿existe una forma sencilla de forzar la actualización de los certificados raíz ? Sí, podría seguir el camino con

  • certutil -generateSSTFromWU WURoots.sst
  • seleccionar los certificados que necesito y exportarlos a un archivo .sst propio
  • usar Import-Certificate (o distribuir a través de GPO)

¿Seguramente existe una forma menos complicada y más automatizada?

Gracias Dan

answer

De forma predeterminada, los certificados raíz se actualizan automáticamente a través de Windows Update .

¿Puede tener esta función deshabilitada en su entorno a través de GPO? Puede comprobar si se ha configurado la clave siguiente, pero no existe de forma predeterminada:

Get-ItemProperty HKLM:\Software\Policies\Microsoft\SystemCertificates\AuthRoot -Name DisableRootAutoUpdate

También requiere ciertas actualizaciones para 2008/2012 como KB3004394 , así que asegúrese de estar actualizado en general.


No recomiendo administrar certificados raíz manualmente, pero puede ver fácilmente los certificados existentes utilizando el proveedor de certificados como:

Get-ChildItem -Path Cert:\LocalMachine\CA\

Y tal vez desee comparar sus certificados locales con una máquina remota:

# Get the list of local root/CA certificates
$localCerts = (Get-ChildItem -Path Cert:\LocalMachine\CA\)+(Get-ChildItem -Path Cert:\LocalMachine\Root\)

# Compare to the same certificates on a remote server
$result = Invoke-Command -ComputerName 'Server01' -ScriptBlock {
  $remoteCerts = (Get-ChildItem -Path Cert:\LocalMachine\CA\)+(Get-ChildItem -Path Cert:\LocalMachine\Root\)
  Compare-Object $using:localCerts $remoteCerts -Property thumbprint -PassThru
}

# Display certificates that don't match
$result | select SideIndicator,Thumbprint,FriendlyName,Subject

Aquí hay un ejemplo que compara entre win10 y Server 2016. Puede ver que una de las diferencias es que mi máquina local tiene un módulo TPM en el que confía:

SideIndicator Thumbprint                               Subject                                                                                          
------------- ----------                               -------                                                                                          
=>            DE28F4A4FFE5B92FA3C503D1A349A7F9962A8212 CN=GeoTrust Global CA, O=GeoTrust Inc., C=US                                                     
<=            D4FFDB19BA590FFFAA34DB5F4B568706A2978436 CN=Microsoft TPM Root Certificate Authority 2014, O=Microsoft Corporation, L=Redmond, S=Washin...

Estoy usando SigCheck para esto.

 sigcheck.exe -tv

enumera los certificados que no están enraizados en la lista de certificados de confianza de Microsoft.

Utilizo esto desde un script de PowerShell para alertarme sobre certificados que no son de confianza.