Abilita i criteri di registrazione dei certificati e richiedi un certificato tramite PowerShell


9

In questo momento, sto facendo quanto segue per richiedere un certificato da un server CEP:

  • Apri gpedit.msc
  • In Configurazione computer> Impostazioni di Windows> Impostazioni di sicurezza> Criteri chiave pubblica, fai doppio clic su "Client di servizi certificati - Criterio di registrazione certificati"
  • Abilitare
  • Immettere l'URI CEP
  • Passa a autenticazione nome utente / password
  • Convalida (Fornisci crediti)
  • Aprire MMC e importare Snap di certificati
  • Vai a Certificati> Personale
  • Fare clic con il tasto destro del mouse> Richiedi nuovo certificato
  • Inserisci "ulteriori informazioni" (CN, nome DNS, ecc.)
  • Fornire crediti

Dopo questo ho un certificato dal CEP; tuttavia, questo è un processo doloroso da eseguire manualmente. C'è un modo per automatizzare questo in Server 2008 (e 2012)? Tutte le informazioni che posso trovare al riguardo spiegano come installare i servizi CEP per trasformare un server in un server delle politiche di registrazione (nulla riguardo alla richiesta effettiva di un nuovo certificato o all'abilitazione sul lato client). È possibile automatizzare questo?

Sembra che questo processo aggiunga molti dati in HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Cryptography. Posso aggiungere manualmente questo (e falsificare un GUID / ServiceID)?


1
Non scoraggiare il tuo entusiasmo, poiché mi piace anche POWERSHELL TUTTE LE COSE !!!!!! ma i cmdlet di criteri di gruppo sono ancora assolutamente orribili e i cmdlet PKI sono molto migliorati in v4 su v3, quindi ... :( Tuttavia, trovo utile questo modulo PKI di terze parti per il modulo PowerShell e potrebbe richiedere alcuni dei fai capire cosa stai provando a fare.
HopelessN00b,

Risposte:


3

Presumo che le tue richieste di certificati vengano effettuate utilizzando un modello. In tal caso, utilizzare l' Public Key Policies/Certificate Services Client - Auto-Enrollment Settingsoggetto Criteri di gruppo per applicare la registrazione automatica. Dovrai anche assicurarti che il modello ACL abbia Enrolle AutoEnrollcontrassegnato per computer di dominio o utenti di dominio (o qualunque oggetto acl, a seconda del pubblico previsto) C'è un criterio di configurazione utente e di configurazione del computer da sfruttare a seconda che si tratti o meno di una macchina cert o user cert che stai provando a spingere. Le iscrizioni iniziano non appena la politica viene spinta (di solito circa 15 minuti) dopo che l'oggetto Criteri di gruppo è stato collegato e applicato.


2
Bene, duh. Sono stato così bloccato dalla parte di PowerShell, mi sono completamente oscurato dal fatto che ho impostato molti, molti oggetti Criteri di gruppo per automatizzare la registrazione dei certificati per molti anni. D'oh! Buona pesca.
HopelessN00b,

Questa è sicuramente un'opzione (probabilmente l'opzione migliore), ma preferirei impostare un'impostazione dei criteri di gruppo locale. È possibile?
EG

2
@EGr perché nel mondo vorresti farlo?
MDMoore313,

@ HopelessN00b Ho fatto la stessa cosa, tuttavia sarebbe bello avere un modo PowerShell per farlo almeno per scopi di risoluzione dei problemi, quindi è ancora una bella domanda.
MDMoore313,

1

Questo è il processo che ho usato su Windows 2012 R2 e versioni successive. Tutto il codice PowerShell è stato eseguito da un prompt di PowerShell elevato. L'automazione completa viene lasciata come esercizio per l'utente.

necessario

Assicurarsi di disporre di un modello sul server dei certificati in cui sia selezionato il pulsante di opzione "Fornisci nella richiesta" nella scheda Oggetto. Poiché non si tratta di una macchina AD, il server dei certificati non è in grado di eseguire una query adeguata di Active Directory per le informazioni.

Esporta la radice

Esportare il certificato dell'autorità di certificazione radice attendibile sul server dei certificati e quindi copiare il file del certificato sul server di destinazione

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

Fidati della radice

Importare quel certificato nell'autorità di certificazione radice attendibile sul server di destinazione

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

Provider di criteri di Active Directory

Determinare l'URL per il provider di criteri di 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"

Politica di iscrizione

Aggiungi i criteri di iscrizione al server di destinazione (funziona solo su Windows 2012 e versioni successive. Per istruzioni sulla GUI, vedi sotto). Assicurarsi che il criterio venga aggiunto dopo aver creato il modello non di dominio, altrimenti non verrà visualizzato poiché il criterio non viene aggiornato.

$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

Ottieni il certificato

Ora dovresti essere in grado di registrarti per un certificato usando il modello desiderato

$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

Criteri di iscrizione pre-Windows 2012 R2

  1. Apri i certificati MMC
  2. Eseguire il drill-down nell'archivio certificati personali
  3. Fare clic con il tasto destro del mouse su "Certificati" e selezionare Tutte le attività / Operazioni avanzate / Gestisci
  4. Politiche di iscrizione dal menu contestuale
  5. Fai clic sul pulsante "Aggiungi"
  6. Incolla l'URL per il criterio di iscrizione
  7. Seleziona Nome utente / password come tipo di autenticazione
  8. Fai clic sul pulsante "Convalida server" e inserisci le credenziali del tuo dominio, incluso il dominio
  9. Supponendo che tu sia stato in grado di convalidare correttamente, fai clic sul pulsante "Aggiungi"
  10. Seleziona il criterio di iscrizione e fai clic sul pulsante "Proprietà"
  11. Assicurati che la casella "Abilita per iscrizione e rinnovo automatici" sia selezionata
  12. Non ho mai controllato "Richiedi convalida forte durante l'iscrizione", quindi non so cosa faccia

0

Non ho una soluzione completa, tuttavia, posso consigliare i punti di partenza. Il mio modulo PKI di PowerShell è in grado di registrare l'endpoint del servizio di iscrizione a partire da Windows 7 / Windows Server 2008 R2 (notare che Windows Server 2008 non supporta i servizi di registrazione). Ecco un esempio di come registrare una politica: http://en-us.sysadmins.lv/Lists/Posts/Post.aspx?ID=101

per quanto riguarda l'iscrizione. Questa serie di post sul blog potrebbe fornire alcune informazioni su come utilizzare le interfacce COM CertEnroll per eseguire la registrazione dei certificati in PowerShell. Non c'è nulla sui servizi web di iscrizione (purtroppo), ma le tecniche sono le stesse. Dovrai iniziare con questa interfaccia: IX509CertificateRequestPkcs10V2

HTH

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.