Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: Windows PowerShell 4.0, Windows PowerShell 5.0
DSC gestisce la configurazione dei nodi del server applicando le informazioni archiviate in un file MOF, in cui Gestione configurazione locale implementa lo stato finale desiderato. Poiché questo file contiene i dettagli della configurazione, è importante mantenerlo sicuro. Questo articolo descrive come assicurarsi che il nodo di destinazione abbia crittografato il file.
A partire da PowerShell versione 5.0, l'intero file MOF viene crittografato per impostazione predefinita quando viene applicato al nodo usando il Start-DSCConfiguration cmdlet. Il processo descritto in questo articolo è necessario solo quando si implementa una soluzione che utilizza il protocollo del servizio pull se i certificati non sono gestiti, per garantire che le configurazioni scaricate dal nodo di destinazione possano essere decrittografate e lette dal sistema prima di essere applicate, ad esempio il servizio pull disponibile in Windows Server. I nodi registrati in Azure Automation DSC avranno automaticamente i certificati installati e gestiti dal servizio senza alcun sovraccarico amministrativo necessario.
Annotazioni
In questo argomento vengono illustrati i certificati utilizzati per la crittografia. Per la crittografia è sufficiente un certificato autofirmato, perché la chiave privata è sempre mantenuta segreta e la crittografia non implica l'attendibilità del documento. I certificati autofirmati non devono essere utilizzati a scopo di autenticazione. È consigliabile utilizzare un certificato di un'autorità di certificazione (CA) attendibile per qualsiasi scopo di autenticazione.
Prerequisiti
Per crittografare correttamente le credenziali usate per proteggere una configurazione DSC, assicurarsi di disporre di quanto segue:
- Alcuni mezzi per l'emissione e la distribuzione dei certificati. In questo argomento e nei relativi esempi si presuppone l'utilizzo dell'Autorità di certificazione di Active Directory. Per ulteriori informazioni di base su Servizi certificati Active Directory, vedere Cenni preliminari su Servizi certificati Active Directory.
- Accesso amministrativo al nodo o ai nodi di destinazione.
- Ogni nodo di destinazione dispone di un certificato compatibile con la crittografia salvato nel proprio archivio personale. In Windows PowerShell il percorso dell'archivio è Cert:\LocalMachine\My. Negli esempi di questo argomento viene utilizzato il modello di "autenticazione della workstation", disponibile (insieme ad altri modelli di certificato) in Modelli di certificato predefiniti.
- Se si eseguirà questa configurazione in un computer diverso dal nodo di destinazione, esportare la chiave pubblica del certificato e quindi importarla nel computer da cui si eseguirà la configurazione. Assicurati di esportare solo la chiave pubblica ; Mantieni la chiave privata al sicuro.
Annotazioni
Le risorse script presentano limitazioni per quanto riguarda la crittografia. Per ulteriori informazioni, vedere Risorsa script
Processo complessivo
- Configurare i certificati, le chiavi e le identificazioni personali, assicurandosi che ogni nodo di destinazione disponga di copie del certificato e che il computer di configurazione disponga della chiave pubblica e dell'identificazione personale.
- Creare un blocco di dati di configurazione che contenga il percorso e l'identificazione personale della chiave pubblica.
- Creare uno script di configurazione che definisca la configurazione desiderata per il nodo di destinazione e imposti la decrittografia nei nodi di destinazione ordinando a Gestione configurazione locale di decrittografare i dati di configurazione utilizzando il certificato e la relativa identificazione personale.
- Eseguire la configurazione, che imposterà le impostazioni di Gestione configurazione locale e avvierà la configurazione DSC.
Requisiti del certificato
Per applicare la crittografia delle credenziali, è necessario che nel nodo di destinazione sia disponibile un certificato di chiave pubblica considerato attendibile dal computer utilizzato per creare la configurazione DSC. Questo certificato di chiave pubblica ha requisiti specifici per l'uso per la crittografia delle credenziali DSC:
-
Utilizzo chiave:
- Deve contenere: 'KeyEncipherment' e 'DataEncipherment'.
- Non deve contenere: "Firma digitale".
-
Utilizzo dei tasti migliorato:
- Deve contenere: Crittografia dei documenti (1.3.6.1.4.1.311.80.1).
- Non deve contenere: Autenticazione client (1.3.6.1.5.5.7.3.2) e Autenticazione server (1.3.6.1.5.5.7.3.1).
- La chiave privata per il certificato è disponibile sul Node_ *Target.
- Il provider per il certificato deve essere "Microsoft RSA SChannel Cryptographic Provider".
Importante
Sebbene sia possibile utilizzare un certificato contenente una chiave di utilizzo di "Firma digitale" o uno degli EKU di autenticazione, ciò consentirà alla chiave di crittografia di essere utilizzata in modo più improprio e vulnerabile agli attacchi. È quindi consigliabile utilizzare un certificato creato appositamente allo scopo di proteggere le credenziali DSC che omette questi Utilizzo chiavi ed EKU.
Qualsiasi certificato esistente nel nodo di destinazione che soddisfi questi criteri può essere usato per proteggere le credenziali DSC.
Creazione del certificato
Esistono due approcci che è possibile adottare per creare e utilizzare il certificato di crittografia richiesto (coppia di chiavi pubblica-privata).
- Crearlo sul nodo di destinazione ed esportare solo la chiave pubblica nel nodo di creazione
- Crearlo nel nodo di creazione ed esportare l'intera coppia di chiavi nel nodo di destinazione
Il metodo 1 è consigliato perché la chiave privata usata per decrittografare le credenziali nel MOF rimane sempre nel nodo di destinazione.
Creazione del certificato nel nodo di destinazione
La chiave privata deve essere mantenuta segreta, perché viene usata per decrittografare il MOF nel nodo di destinazione Il modo più semplice per eseguire questa operazione consiste nel creare il certificato di chiave privata nel nodo di destinazione e copiare il certificato di chiave pubblica nel computer utilizzato per creare la configurazione DSC in un file MOF. L'esempio seguente:
- crea un certificato sul nodo di destinazione
- esporta il certificato di chiave pubblica sul nodo di destinazione.
- importa il certificato di chiave pubblica nell'archivio certificati personali nel nodo Creazione e modifica.
Sul nodo di destinazione: creare ed esportare il certificato
Nodo di destinazione: Windows Server 2016 e Windows 10
# note: These steps need to be performed in an Administrator PowerShell session
$cert = New-SelfSignedCertificate -Type DocumentEncryptionCertLegacyCsp -DnsName 'DscEncryptionCert' -HashAlgorithm SHA256
# export the public key certificate
$cert | Export-Certificate -FilePath "$env:temp\DscPublicKey.cer" -Force
Una volta esportato, è DscPublicKey.cer necessario copiarlo nel nodo di creazione.
Nel nodo di creazione: importare la chiave pubblica del certificato
# Import to the my store
Import-Certificate -FilePath "$env:temp\DscPublicKey.cer" -CertStoreLocation Cert:\LocalMachine\My
Creazione del certificato nel nodo di creazione e modifica
In alternativa, il certificato di crittografia può essere creato nel nodo di creazione, esportato con la chiave privata come file PFX e quindi importato nel nodo di destinazione. Questo è il metodo corrente per l'implementazione della crittografia delle credenziali DSC in Nano Server. Sebbene il PFX sia protetto da una password, deve essere mantenuto al sicuro durante il trasporto. L'esempio seguente:
- crea un certificato nel nodo Creazione e modifica.
- esporta il certificato inclusa la chiave privata nel nodo Authoring.
- rimuove la chiave privata dal nodo di creazione, ma mantiene il certificato di chiave pubblica nell'archivio personale .
- importa il certificato di chiave privata nell'archivio certificati My(Personal) sul nodo Target.
- deve essere aggiunto all'archivio radice in modo che sia considerato attendibile dal nodo di destinazione.
Nel nodo di creazione: creare ed esportare il certificato
Nodo di destinazione: Windows Server 2016 e Windows 10
# note: These steps need to be performed in an Administrator PowerShell session
$cert = New-SelfSignedCertificate -Type DocumentEncryptionCertLegacyCsp -DnsName 'DscEncryptionCert' -HashAlgorithm SHA256
# export the private key certificate
$mypwd = ConvertTo-SecureString -String "YOUR_PFX_PASSWD" -Force -AsPlainText
$cert | Export-PfxCertificate -FilePath "$env:temp\DscPrivateKey.pfx" -Password $mypwd -Force
# remove the private key certificate from the node but keep the public key certificate
$cert | Export-Certificate -FilePath "$env:temp\DscPublicKey.cer" -Force
$cert | Remove-Item -Force
Import-Certificate -FilePath "$env:temp\DscPublicKey.cer" -CertStoreLocation Cert:\LocalMachine\My
Una volta esportato, dovrebbe DscPrivateKey.pfx essere copiato nel nodo di destinazione.
Sul nodo di destinazione: importare la chiave privata del certificato come radice attendibile
# Import to the root store so that it is trusted
$mypwd = ConvertTo-SecureString -String "YOUR_PFX_PASSWD" -Force -AsPlainText
Import-PfxCertificate -FilePath "$env:temp\DscPrivateKey.pfx" -CertStoreLocation Cert:\LocalMachine\My -Password $mypwd > $null
Dati di configurazione
Il blocco dati di configurazione definisce su quali nodi di destinazione operare, se crittografare o meno le credenziali, i mezzi di crittografia e altre informazioni. Per ulteriori informazioni sul blocco dati di configurazione, vedere Separazione dei dati di configurazione e di ambiente.
Gli elementi che possono essere configurati per ogni nodo e che sono correlati alla crittografia delle credenziali sono:
- NodeName : nome del nodo di destinazione per cui viene configurata la crittografia delle credenziali.
- PsDscAllowPlainTextPassword : indica se le credenziali non crittografate possono essere passate a questo nodo. Questa operazione non è consigliata.
- Identificazione personale : identificazione personale del certificato che verrà usata per decrittografare le credenziali nella configurazione DSC nel nodo di destinazione. Questo certificato deve esistere nell'archivio certificati del computer locale nel nodo di destinazione.
- CertificateFile : il file del certificato (contenente solo la chiave pubblica) che deve essere utilizzato per crittografare le credenziali per il nodo di destinazione. Deve trattarsi di un file di certificato in formato X.509 binario con codifica DER o X.509 con codifica Base 64.
In questo esempio viene illustrato un blocco di dati di configurazione che specifica un nodo di destinazione su cui agire denominato targetNode, il percorso del file del certificato di chiave pubblica (denominato targetNode.cer) e l'identificazione personale per la chiave pubblica.
$ConfigData = @{
AllNodes = @(
@{
# The name of the node we are describing
NodeName = "targetNode"
# The path to the .cer file containing the
# public key of the Encryption Certificate
# used to encrypt credentials for this node
CertificateFile = "C:\publicKeys\targetNode.cer"
# The thumbprint of the Encryption Certificate
# used to decrypt the credentials on target node
Thumbprint = "AC23EA3A9E291A75757A556D0B71CBBF8C4F6FD8"
}
)
}
Script di configurazione
Nello script di configurazione stesso, utilizzare il PsCredential parametro per assicurarsi che le credenziali vengano memorizzate per il minor tempo possibile. Quando si esegue l'esempio fornito, DSC richiederà le credenziali e quindi crittograferà il file MOF utilizzando il CertificateFile associato al nodo di destinazione nel blocco di dati di configurazione. In questo esempio di codice viene copiato un file da una condivisione protetta per un utente.
configuration CredentialEncryptionExample
{
param(
[Parameter(Mandatory=$true)]
[ValidateNotNullorEmpty()]
[PsCredential] $credential
)
Node $AllNodes.NodeName
{
File exampleFile
{
SourcePath = "\\Server\share\path\file.ext"
DestinationPath = "C:\destinationPath"
Credential = $credential
}
}
}
Impostazione della decrittografia
Prima che Start-DscConfiguration possa funzionare, è necessario indicare a Gestione configurazione locale in ogni nodo di destinazione quale certificato usare per decrittografare le credenziali, usando la risorsa CertificateID per verificare l'identificazione personale del certificato. Questa funzione di esempio consente di trovare il certificato locale appropriato (potrebbe essere necessario personalizzarlo in modo da trovare il certificato esatto che si desidera utilizzare):
# Get the certificate that works for encryption
function Get-LocalEncryptionCertificateThumbprint
{
(dir Cert:\LocalMachine\my) | %{
# Verify the certificate is for Encryption and valid
if ($_.PrivateKey.KeyExchangeAlgorithm -and $_.Verify())
{
return $_.Thumbprint
}
}
}
Con il certificato identificato dalla relativa identificazione personale, lo script di configurazione può essere aggiornato per utilizzare il valore:
configuration CredentialEncryptionExample
{
param(
[Parameter(Mandatory=$true)]
[ValidateNotNullorEmpty()]
[PsCredential] $credential
)
Node $AllNodes.NodeName
{
File exampleFile
{
SourcePath = "\\Server\share\path\file.ext"
DestinationPath = "C:\destinationPath"
Credential = $credential
}
LocalConfigurationManager
{
CertificateId = $node.Thumbprint
}
}
}
Esecuzione della configurazione
A questo punto, è possibile eseguire la configurazione, che produrrà due file:
- File
*.meta.mofche configura Gestione configurazione locale per decrittografare le credenziali utilizzando il certificato archiviato nell'archivio del computer locale e identificato dall'identificazione personale. Set-DscLocalConfigurationManager applica il*.meta.moffile. - Un file MOF che applica effettivamente la configurazione. Start-DscConfiguration applica la configurazione.
Questi comandi eseguiranno questi passaggi:
Write-Host "Generate DSC Configuration..."
CredentialEncryptionExample -ConfigurationData $ConfigData -OutputPath .\CredentialEncryptionExample
Write-Host "Setting up LCM to decrypt credentials..."
Set-DscLocalConfigurationManager .\CredentialEncryptionExample -Verbose
Write-Host "Starting Configuration..."
Start-DscConfiguration .\CredentialEncryptionExample -wait -Verbose
In questo esempio viene eseguito il push della configurazione DSC nel nodo di destinazione. La configurazione DSC può essere applicata anche utilizzando un server di pull DSC, se disponibile.
Per altre informazioni sull'applicazione di configurazioni DSC tramite un server di pull DSC, vedere Configurazione di un client di pull DSC .
Esempio di modulo di crittografia delle credenziali
Di seguito è riportato un esempio completo che incorpora tutti questi passaggi, oltre a un cmdlet helper che esporta e copia le chiavi pubbliche:
# A simple example of using credentials
configuration CredentialEncryptionExample
{
param(
[Parameter(Mandatory=$true)]
[ValidateNotNullorEmpty()]
[PsCredential] $credential
)
Node $AllNodes.NodeName
{
File exampleFile
{
SourcePath = "\\server\share\file.txt"
DestinationPath = "C:\Users\user"
Credential = $credential
}
LocalConfigurationManager
{
CertificateId = $node.Thumbprint
}
}
}
# A Helper to invoke the configuration, with the correct public key
# To encrypt the configuration credentials
function Start-CredentialEncryptionExample
{
[CmdletBinding()]
param ($computerName)
[string] $thumbprint = Get-EncryptionCertificate -computerName $computerName -Verbose
Write-Verbose "using cert: $thumbprint"
$certificatePath = join-path -Path "$env:SystemDrive\$script:publicKeyFolder" -childPath "$computername.EncryptionCertificate.cer"
$ConfigData= @{
AllNodes = @(
@{
# The name of the node we are describing
NodeName = "$computerName"
# The path to the .cer file containing the
# public key of the Encryption Certificate
CertificateFile = "$certificatePath"
# The thumbprint of the Encryption Certificate
# used to decrypt the credentials
Thumbprint = $thumbprint
};
);
}
Write-Verbose "Generate DSC Configuration..."
CredentialEncryptionExample -ConfigurationData $ConfigData -OutputPath .\CredentialEncryptionExample `
-credential (Get-Credential -UserName "$env:USERDOMAIN\$env:USERNAME" -Message "Enter credentials for configuration")
Write-Verbose "Setting up LCM to decrypt credentials..."
Set-DscLocalConfigurationManager .\CredentialEncryptionExample -Verbose
Write-Verbose "Starting Configuration..."
Start-DscConfiguration .\CredentialEncryptionExample -wait -Verbose
}
#region HelperFunctions
# The folder name for the exported public keys
$script:publicKeyFolder = "publicKeys"
# Get the certificate that works for encryptions
function Get-EncryptionCertificate
{
[CmdletBinding()]
param ($computerName)
$returnValue= Invoke-Command -ComputerName $computerName -ScriptBlock {
$certificates = dir Cert:\LocalMachine\my
$certificates | %{
# Verify the certificate is for Encryption and valid
if ($_.PrivateKey.KeyExchangeAlgorithm -and $_.Verify())
{
# Create the folder to hold the exported public key
$folder= Join-Path -Path $env:SystemDrive\ -ChildPath $using:publicKeyFolder
if (! (Test-Path $folder))
{
md $folder | Out-Null
}
# Export the public key to a well known location
$certPath = Export-Certificate -Cert $_ -FilePath (Join-Path -path $folder -childPath "EncryptionCertificate.cer")
# Return the thumbprint, and exported certificate path
return @($_.Thumbprint,$certPath);
}
}
}
Write-Verbose "Identified and exported cert..."
# Copy the exported certificate locally
$destinationPath = join-path -Path "$env:SystemDrive\$script:publicKeyFolder" -childPath "$computername.EncryptionCertificate.cer"
Copy-Item -Path (join-path -path \\$computername -childPath $returnValue[1].FullName.Replace(":","$")) $destinationPath | Out-Null
# Return the thumbprint
return $returnValue[0]
}
Start-CredentialEncryptionExample