Habilite la política de inscripción de certificados y solicite un certificado con PowerShell

9

En este momento, estoy haciendo lo siguiente para solicitar un certificado de un servidor CEP:

  • Abra gpedit.msc
  • En Configuración del equipo> Configuración de Windows> Configuración de seguridad> Políticas de clave pública, haga doble clic en "Cliente de Servicios de certificados - Política de inscripción de certificados"
  • Habilitar
  • Ingrese el URI del CEP
  • Cambiar a autenticación de nombre de usuario / contraseña
  • Validar (proporcionar créditos)
  • Abra MMC e importe los certificados a presión.
  • Vaya a Certificados> Personal
  • Haga clic derecho> Solicitar nuevo certificado
  • Ingrese "más información" (CN, nombre DNS, etc.)
  • Proporcionar créditos

Después de esto tengo un certificado del CEP; Sin embargo, este es un proceso doloroso de hacer manualmente. ¿Hay alguna forma de automatizar esto en Server 2008 (y 2012)? Toda la información que puedo encontrar sobre esto dice cómo instalar los servicios CEP para hacer que un servidor sea un servidor de políticas de inscripción (nada sobre solicitar un nuevo certificado o habilitarlo en el lado del cliente). ¿Es posible automatizar esto?

Parece que este proceso agrega muchos datos en HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Cryptography. ¿Puedo agregar esto manualmente (y falsificar un GUID / ServiceID)?

EGr
fuente
1
¡No desanime su entusiasmo, ya que también me gusta PODER A TODAS LAS COSAS! pero los cmdlets de directiva de grupo siguen siendo absolutamente horribles, y los cmdlets PKI se han mejorado mucho en v4 sobre v3, así que ... :( Sin embargo, encuentro útil este módulo PKI de terceros para el módulo PowerShell , y puede tomar algo del dolor manual lo que estás tratando de hacer.
HopelessN00b

Respuestas:

3

Supongo que sus solicitudes de certificado se realizan utilizando una plantilla. Si ese es el caso, utilice el Public Key Policies/Certificate Services Client - Auto-Enrollment SettingsGPO para exigir la inscripción automática. También querrá asegurarse de que la plantilla ACL tenga Enrolly AutoEnrollesté marcada para computadoras de dominio o usuarios de dominio (o cualquier objeto acl, dependiendo de la audiencia destinataria) Hay una política de configuración de usuario y configuración de usuario para aprovechar dependiendo de si es o no una máquina cert o cert de usuario que estás tratando de impulsar. La inscripción comienza tan pronto como se empuja la política (generalmente unos 15 minutos) después de que el GPO se vincula y se aplica.

Colyn1337
fuente
2
Bueno duh. Me enganché tanto con la parte de PowerShell, que me quedé totalmente en blanco porque he configurado muchos, muchos GPO para automatizar la inscripción de certificados durante muchos años. D'oh! Buena atrapada.
HopelessN00b
Esta es definitivamente una opción (probablemente la mejor opción), pero preferiría establecer una configuración de directiva de grupo local ... ¿es esto posible?
EGr
2
@EGr por qué en el mundo querrías hacer eso?
MDMoore313
@ HopelessN00b Hice lo mismo, sin embargo, sería genial tener una forma de PowerShell para hacerlo como mínimo para solucionar problemas, por lo que sigue siendo una muy buena pregunta.
MDMoore313
1

Este es el proceso que he usado en Windows 2012 R2 y superior. Todo el código de PowerShell se ejecutó desde un indicador de PowerShell elevado. La automatización completa se deja como un ejercicio para el usuario.

Requisito previo

Asegúrese de tener una plantilla en su servidor de certificados que tenga seleccionado el botón de opción "Suministro en la solicitud" en la pestaña Asunto. Como no se trata de una máquina AD, el servidor de certificados no puede consultar adecuadamente la información en Active Directory.

Exportar la raíz

Exporte el Certificado de la Autoridad de certificación raíz de confianza en su Servidor de certificados y luego copie ese archivo de certificado en su Servidor de destino

certutil --% -ca.cert <name of certificate file>

Confía en la raíz

Importe ese certificado a la Autoridad de certificación raíz de confianza en su servidor de destino

$PathToCertificate=<name of certificate file>
$RootCertificate=Get-PfxCertificate -FilePath $PathToCertificate
$AlreadyExists=Get-ChildItem -Path "Cert:\LocalMachine\Root" | Where-Object { $_.Thumbprint -eq $RootCertificate.Thumbprint }
if ($AlreadyExists -eq $null) { Import-Certificate -CertStoreLocation "Cert:\LocalMachine\Root" -FilePath $PathToCertificate }
else { Write-Warning "Root certificate already installed" }

Proveedor de políticas de Active Directory

Determine la URL para el proveedor de políticas de Active Directory

# Get AD Configuration Context
$RootDSE=[System.DirectoryServices.DirectoryEntry]::new("LDAP://RootDSE")
$ConfigContext="CN=Enrollment Services,CN=Public Key Services,CN=Services,"+$RootDSE.configurationNamingContext
# Get name of Enterprise Root Certificate Autority server
$Server=Get-ADObject -SearchBase $ConfigContext -Filter "*"
if ($Server.Count -eq 1) { throw "No Enterprise Root Certificate Autority server exists" }
else { $Server=$Server[1].Name }
# Get Enrollment URL
$ConfigContext="CN=$Server,"+$ConfigContext
$EnrollmentURL=(Get-ADObject -SearchBase $ConfigContext -Filter "*" -Properties "msPKI-Enrollment-Servers" | Select-Object -ExpandProperty "msPKI-Enrollment-Servers").Split("`n") | Where-Object { $_ -like "http*" }
if ($EnrollmentURL -eq $null) { $EnrollmentURL="" }
# Get AD Enrollment Policy URL
$Server=$Server+$RootDSE.configurationNamingContext.Value.Replace("CN=Configuration","").Replace(",DC=",".")
$WMI=Get-WmiObject -ComputerName $Server -Namespace "root\WebAdministration" -Class Application | Where-Object { $_.Path -eq "/ADPolicyProvider_CEP_UsernamePassword" }
if ($WMI -ne $null) { $PolicyURL="https://"+$Server+$WMI.Path+"/service.svc/CEP" }
else { $PolicyURL="" }
Write-Output "Enrollment URL = $EnrollmentURL"
Write-Output "Policy URL = $PolicyURL"

Política de inscripción

Agregue la Política de inscripción al servidor de destino (esto solo funciona en Windows 2012 y versiones posteriores. Para obtener instrucciones de la GUI, consulte a continuación). Asegúrese de que la Política se agrega después de crear la plantilla que no es de dominio, de lo contrario no aparecerá ya que la política no se actualiza.

$User="<your domain name>\<your domain user name>"
$Pass="<Your domain password>"
$SecPass=ConvertTo-SecureString -String $Pass -AsPlainText -Force
$Cred=[System.Management.Automation.PSCredential]::new($User,$SecPass)
Add-CertificateEnrollmentPolicyServer -Url $PolicyURL -context Machine -NoClobber -AutoEnrollmentEnabled -Credential $Cred

Obtener el certificado

Ahora debería poder inscribirse para un certificado utilizando la plantilla deseada

$DNS="<FQDN of your server>"
$URL=Get-CertificateEnrollmentPolicyServer -Scope All -Context Machine | Select-Object -ExpandProperty Url | Select-Object -ExpandProperty AbsoluteUri
$Enrollment=Get-Certificate -Url $URL -Template "<Template name (not display name)>" -SubjectName "CN=$DNS" -DnsName $DNS -Credential $Cred -CertStoreLocation cert:\LocalMachine\My
$Enrollment.Certificate.FriendlyName=$DNS

Política de inscripción anterior a Windows 2012 R2

  1. Abra los certificados MMC
  2. Ir a la tienda de certificados personales
  3. Haga clic derecho en "Certificados" y seleccione Todas las tareas / Operaciones avanzadas / Administrar
  4. Políticas de inscripción desde el menú contextual
  5. Haga clic en el botón "Agregar"
  6. Pegue la URL de la política de inscripción.
  7. Seleccione Nombre de usuario / contraseña como el tipo de autenticación
  8. Haga clic en el botón "Validar servidor" e ingrese sus credenciales de dominio, incluido el dominio
  9. Suponiendo que haya podido validar con éxito, haga clic en el botón "Agregar"
  10. Seleccione la política de inscripción y haga clic en el botón "Propiedades"
  11. Asegúrese de que la casilla "Habilitar la inscripción y renovación automáticas" esté marcada
  12. Nunca he marcado "Requerir validación fuerte durante la inscripción", así que no sé lo que hace
Slogmeister Extraordinaire
fuente
0

No tengo una solución completa, sin embargo, puedo aconsejar puntos de inicio. Mi módulo PowerShell PKI tiene la capacidad de registrar el punto final del servicio de inscripción a partir de Windows 7 / Windows Server 2008 R2 (tenga en cuenta que Windows Server 2008 no admite servicios de inscripción). Aquí hay un ejemplo de cómo registrar una política: http://en-us.sysadmins.lv/Lists/Posts/Post.aspx?ID=101

con respecto a la inscripción. Esta serie de publicaciones de blog puede brindarle información sobre cómo utilizar las interfaces COM CertEnroll para realizar la inscripción de certificados en PowerShell. No hay nada acerca de los servicios web de inscripción (desafortunadamente), pero las técnicas son las mismas. Deberá comenzar con esta interfaz: IX509CertificateRequestPkcs10V2

HTH

Cripta32
fuente