IIS: Gestione di più certificati in più server Web

Benché possa essere scomodo gestire numerosi certificati di sicurezza, è possibile utilizzare Windows PowerShell per velocizzare il processo.

Jason Helmick

Gestione di certificati in ambienti Web su larga scala è una sfida su larga scala. Ci potrebbero essere centinaia di server che ospitano centinaia di siti Web SSL, tutti con certificati univoci. L'installazione e il mantenimento dei certificati su questa scala è un processo che richiede tempo con la GUI di gestione IIS.

Non abbiate paura — c' è un modo migliore. Se avete due o 200 server Web, Windows PowerShell può trasformare giorni, settimane o mesi di tempo in pochi minuti. Durante tutto il processo di distribuzione, installazione e configurazione dei certificati e SSL per i siti Web, ci sono alcuni trucchi che è possibile utilizzare per individuare i certificati che stanno per scadere, quindi li potete sostituire.

Le regole sono semplici: Questo funziona su IIS 7.5 e 8 IIS, ma avete bisogno di Windows PowerShell remoting abilitato. In questo esempio, ci sono due server Web configurato in un bilanciamento del carico con i propri gli indirizzi IP del cluster. Ognuno esegue tre nuovi siti Web che richiedono i certificati e le associazioni per SSL. Ho cambiato gli indirizzi IP del cluster nel codice per gli indirizzi interni di oscurare i siti Web di effettivi, ma si ottiene l'idea. Ho acquistato il mio nuovi certificati e avere i file con estensione pfx pronti per la distribuzione. Ecco la carrellata dei siti Web esistenti:

  • Shop.Company.com – indirizzo IP 192.168.3.201-Cert: Shop.Company.com.pfx
  • Update.Company.com – indirizzo IP 192.168.3.202-Cert: Update.Company.com.pfx
  • Register.Company.com – indirizzo IP 192.168.3.203-Cert: Register.Company.com.pfx

Cominciamo da distribuire e installare i certificati sui server Web di bilanciamento del carico.

Distribuzione e installazione

Hai bisogno di due cose per iniziare — una variabile che contiene un elenco di nomi di computer del server Web e una sessione remota di Windows PowerShell per ciascuno di tali server. I nomi dei miei computer è venuto da un file di testo sul mio computer, ma si può afferrare da Active Directory se il server Web sono membri del dominio:

PS> $servers = Get-Content c:\webservers.txt PS> $session = New-PsSession –ComputerName $servers

Copiare i certificati per i server remoti così facilmente è possibile installarle. Non preoccuparti di qualcuno rubare i file con estensione pfx. Potrai eliminarli prima che questa sezione è completa. Per questa dimostrazione, i miei file pfx sono sul mio c:\sites\certpfx computer client:

PS> $servers | foreach-Object{ copy-item -Path c:\sites\certpfx\*.* -Destination "\\$_\c$"}

CertUtil.exe è un ottimo strumento per installare i certificati sulle sessioni di comunicazione remota di Windows PowerShell. Ai seguenti one-liners, ogni server Web sarà installare i certificati. Ricordate, ci sono tre certificati per installare (uno per ogni sito Web), così ho ripetuto i comandi:

PS> Invoke-command -Session $session { certutil -p P@ssw0rd -importpfx c:\shop.company.com.pfx} PS> Invoke-command -Session $session { certutil -p P@ssw0rd -importpfx c:\update.company.com.pfx} PS> Invoke-command -Session $session { certutil -p P@ssw0rd -importpfx c:\register.company.com.pfx}

Quando si utilizza CertUtil.exe, è necessario specificare la password per il pfx. Perché ho eseguito questo in tempo reale, ho appena digitato la password. Se avete intenzione di creare uno script, raccomando sostituendo le password con una variabile che ottiene la password da un prompt dei comandi, come ad esempio:

PS> $Cred = (Get-Credential).password

Assicurati di eliminare i file con estensione pfx dai server Web remoto per impedire eventuali furti possibili certificato:

PS> $servers | foreach-object {Remove-Item -Path "\\$_\c$\*.pfx"}

Con i certificati installati sui server remoti, il passo successivo è di creare le associazioni HTTPS per i siti Web.

Creare sito Web associazioni

Ogni sito Web in ogni server il bilanciamento del carico ha bisogno di un'associazione di HTTPS. Utilizzare il cmdlet New-WebBinding dal modulo WebAdministration e il processo sarà un gioco da ragazzi. I parametri del cmdlet specificano il nome del sito, protocollo, porta e l'indirizzo IP del cluster per il sito. Il SSLFlags determinare dove si trova il certificato che userete per l'associazione:

PS> Invoke-Command -session $session {Import-Module WebAdministration} PS> Invoke-command -Session $session { New-WebBinding -name shop -Protocol https -Port 443 -IPAddress 192.168.3.201 -SslFlags 0} PS> Invoke-command -Session $session { New-WebBinding -name update -Protocol https -Port 443 -IPAddress 192.168.3.202 -SslFlags 0} PS> Invoke-command -Session $session { New-WebBinding -name register -Protocol https -Port 443 -IPAddress 192.168.3.203 -SslFlags 0}

I certificati che hai appena installato sono in Windows certificato deposito, ma qui ci sono le opzioni:

  • 0 – Regolare certificato nell'archivio certificati Windows
  • 1 – Certificato nome indicazione (SNI) server
  • 2 – Archivio certificati centrale
  • 3 – Certificato SNI nell'archivio certificati centrale

C'è un ultimo passo per completare, che è spesso trascurato e dimenticato: collegando i certificati per il nuove sito Web associazioni.

Associare i certificati

Questo ultimo passaggio può essere fonte di confusionario. La grafica IIS Manager nasconde questa parte del processo, ma non può lasciarlo, se si desidera che i siti a lavorare con SSL. È necessario collegare il certificato per l'associazione del sito Web.

Questo è un processo a due fasi. In primo luogo, è necessario ottenere l'identificazione digitale del certificato per ogni sito Web, così può creare una corretta associazione di SSL. Ricordate, sto lavorando con tre siti Web in questo esempio. Avrete bisogno di identificazione personale da ciascun certificato univoco. Ho scelto di conservare l'identificazione personale in tre diverse variabili quindi non confonderli quando li I link ai siti Web:

PS> Invoke-Command -session $session { $CertShop=Get-ChildItem -Path Cert:\LocalMachine\My | where-Object {$_.subject -like "*shop*"} | Select-Object -ExpandProperty Thumbprint} PS> Invoke-Command -session $session { $CertUpdate=Get-ChildItem -Path Cert:\LocalMachine\My | where-Object {$_.subject -like "*update*"} | Select-Object -ExpandProperty Thumbprint} PS> Invoke-Command -session $session { $CertRegister=Get-ChildItem -Path Cert:\LocalMachine\My | where-Object {$_.subject -like "*register*"} | Select-Object -ExpandProperty Thumbprint}

Ora è il momento di utilizzare l'identificazione personale per afferrare l'intero certificato e assegnarlo come un'associazione di SSL per ogni sito Web. Il comando riportato di seguito utilizza Get-Item per afferrare il certificato, quindi New-Item per creare l'associazione di SSL; il provider IIS IIS:\SSLBindings crea le associazioni SSL insieme con le informazioni di associazione:

PS> Invoke-Command -Session $session { get-item -Path "cert:\localmachine\my\$certShop" | new-item -path IIS:\SslBindings\192.168.3.201!443} PS> Invoke-Command -Session $session { get-item -Path "cert:\localmachine\my\$certUpdate" | new-item -path IIS:\SslBindings\192.168.3.202!443} PS> Invoke-Command -Session $session { get-item -Path "cert:\localmachine\my\$certRegister" | new-item -path IIS:\SslBindings\192.168.3.203!443}

In IIS informazione vincolante viene normalmente visualizzata come IPAddress:Port:Hostname (*: 80: *). Tuttavia, Windows PowerShell interpreta i due punti (:) come un indicatore di percorso. Quando si utilizza Windows PowerShell per impostare le informazioni di associazione, si utilizza invece il punto esclamativo (!).

Le associazioni sono ora complete e può raggiungere i siti Web utilizzando HTTPS, come dimostrato qui:

PS> start iexplore https://shop.company.com PS> start iexplore https://update.company.com PS> start iexplore https://register.company.com

Controllo per scadenza

C'è un'altra soluzione utile che impiega tutte le informazioni che hai appena imparato. È una sfida comune business per molti di voi: Sono i certificati in scadenza?

Consiste nel determinare se alcuni stanno per scadere, quindi li potete sostituire parte di gestione dei certificati. È possibile applicare i concetti e le tattiche usate qui per questo problema. Hai solo bisogno di una riga più uno. Ancora una volta, ancora avrete bisogno di una Windows PowerShell remoting sessione aperta per i server Web che si desidera controllare per scadenza dei certificati.

L'esempio seguente analizza tutti i certificati nell'archivio certificati localmachine. Confronta il certificato scadenza Proprietà notafter per la data corrente in una colonna personalizzata denominata ExpireInDays. Il filtro (Where-Object) controlla per vedere se i certificati sono meno di 90 giorni prima della scadenza. Il comando elenca i nomi dei server e i certificati in scadenza:

PS> Invoke-Command -Session $session { Get-ChildItem -Path Cert:\LocalMachine\My | Select-Object -Property PSComputerName, Subject, @{ n='ExpireInDays';e={($_. notafter - (Get-Date)).Days}} | Where-Object {$_.ExpireInDays -lt 90}}

Con tutto quello che hai imparato qui, è possibile rapidamente e con successo sostituire tutti quelli certificati — anche su larga scala — utilizzando Windows PowerShell.

Jason Helmick

Jason Helmickè il direttore delle tecnologie di Windows PowerShell per interfaccia di formazione tecnica, con sede a Phoenix, Arizona Egli è un oratore, autore, insegnante e amministratore IIS involontario.

Contenuti correlati