Protezione del file MOFSecuring the MOF File

Si applica a: Windows PowerShell 4.0, Windows PowerShell 5.0Applies To: Windows PowerShell 4.0, Windows PowerShell 5.0

DSC gestisce la configurazione di nodi server applicando le informazioni archiviate in un file MOF, nel quale Gestione configurazione locale implementa lo stato finale richiesto.DSC manages the configuration of server nodes by applying information stored in a MOF file, where the Local Configuration Manager (LCM) implements the desired end state. Poiché questo file contiene i dettagli della configurazione, è importante garantirne la sicurezza.Because this file contains the details of the configuration, it's important to keep it secure. Questo articolo spiega come verificare che il nodo di destinazione abbia crittografato il file.This article describes how to ensure the target node has encrypted the file.

A partire dalla versione 5.0 di PowerShell, l'intero file MOF viene crittografato per impostazione predefinita quando viene applicato al nodo usando il cmdlet Start-DSCConfiguration.Beginning with PowerShell version 5.0, the entire MOF file is encrypted by default when it is applied to the node using the Start-DSCConfiguration cmdlet. Il processo descritto in questo articolo è obbligatorio solo se si implementa una soluzione che usa il protocollo del servizio pull se i certificati non sono gestiti, al fine di garantire che le configurazioni scaricate dal nodo di destinazione possano essere crittografate e lette dal sistema prima che siano applicate (ad esempio il servizio pull disponibile in Windows Server).The process described in this article is required only when implementing a solution using the pull service protocol if certificates are not managed, to ensure configurations downloaded by the target node can be decrypted and read by the system before they are applied (for example, the pull service available in Windows Server). Nei nodi registrati in Automation DSC per Azure i certificati vengono invece installati e gestiti automaticamente dal servizio senza un sovraccarico amministrativo.Nodes registered to Azure Automation DSC will automatically have certificates installed and managed by the service with no administrative overhead required.

Nota

Questo argomento illustra i certificati usati per la crittografia.This topic discusses certificates used for encryption. Per la crittografia è sufficiente un certificato autofirmato, dal momento che la chiave privata viene sempre mantenuta segreta e la crittografia non implica l'attendibilità del documento.For encryption, a self-signed certificate is sufficient, because the private key is always kept secret and encryption does not imply trust of the document. I certificati autofirmati non vanno usati a scopo di autenticazione.Self-signed certificates should not be used for authentication purposes. È consigliabile usare un certificato proveniente da un'Autorità di certificazione attendibile a scopo di autenticazione.You should use a certificate from a trusted Certification Authority (CA) for any authentication purposes.

PrerequisitiPrerequisites

Per crittografare correttamente le credenziali usate per proteggere una configurazione DSC, assicurarsi di avere a disposizione quanto segue:To successfully encrypt the credentials used to secure a DSC configuration, make sure you have the following:

  • Uno strumento per l'emissione e la distribuzione dei certificati.Some means of issuing and distributing certificates. Questo argomento e gli esempi che contiene presuppongono l'uso di Autorità di certificazione Active Directory.This topic and its examples assume you are using Active Directory Certification Authority. Per altre informazioni generali su Servizi certificati Active Directory, vedere Panoramica di Servizi certificati Active Directory e Servizi certificati Active Directory in Windows Server 2008.For more background information on Active Directory Certificate Services, see Active Directory Certificate Services Overview and Active Directory Certificate Services in Windows Server 2008.
  • Accesso amministrativo al nodo o ai nodi di destinazione.Administrative access to the target node or nodes.
  • Ogni nodo di destinazione ha un certificato che supporta la crittografia, salvato nel proprio archivio personale.Each target node has an encryption-capable certificate saved its Personal Store. In Windows PowerShell il percorso di questo archivio è Cert:\LocalMachine\My.In Windows PowerShell, the path to the store is Cert:\LocalMachine\My. Gli esempi in questo argomento usano il modello "Autenticazione workstation", disponibile (insieme ad altri modelli di certificato) in Modelli di certificato predefiniti.The examples in this topic use the "workstation authentication" template, which you can find (along with other certificate templates) at Default Certificate Templates.
  • Se si intende eseguire questa configurazione in un computer diverso dal nodo di destinazione, esportare la chiave pubblica del certificato e quindi importarla nel computer da cui verrà eseguita la configurazione.If you will be running this configuration on a computer other than the target node, export the public key of the certificate , and then import it to the computer you will run the configuration from. Assicurarsi di esportare solo la chiave pubblica , mantenendo protetta quella privata.Make sure that you export only the public key; keep the private key secure.

Nota

Le risorse di script hanno limitazioni per quanto riguarda la crittografia.Script Resources have limitations when it comes to encryption. Per altre informazioni, vedere Risorsa di scriptFor more information, see Script Resource

Processo generaleOverall process

  1. Configurare i certificati, le chiavi e le identificazioni personali, verificando che ogni nodo di destinazione abbia copie del certificato e che il computer di configurazione abbia la chiave pubblica e l'identificazione personale.Set up the certificates, keys, and thumbprints, making sure that each target node has copies of the certificate and the configuration computer has the public key and thumbprint.
  2. Creare un blocco di dati di configurazione che contenga il percorso e l'identificazione personale della chiave pubblica.Create a configuration data block that contains the path and thumbprint of the public key.
  3. Creare uno script di configurazione che definisca la configurazione desiderata per il nodo di destinazione e che configuri la decrittografia nei nodi di destinazione indicando a Gestione configurazione locale di decrittografare i dati di configurazione usando il certificato e l'identificazione personale.Create a configuration script that defines your desired configuration for the target node and sets up decryption on the target nodes by commanding the Local Configuration manager to decrypt the configuration data using the certificate and its thumbprint.
  4. Eseguire la configurazione, che specifica le impostazioni di Gestione configurazione locale e avvia la configurazione DSC.Run the configuration, which will set the Local Configuration Manager settings and start the DSC configuration.

Flusso di processo per la crittografia delle credenziali

Requisiti per i certificatiCertificate Requirements

Per applicare la crittografia delle credenziali, è necessario che un certificato di chiave pubblica sia disponibile nel nodo di destinazione considerato attendibile dal computer usato per creare la configurazione DSC.To enact credential encryption, a public key certificate must be available on the Target Node that is trusted by the computer being used to author the DSC configuration. Questo certificato di chiave pubblica presenta requisiti specifici ai fini dell'uso per la crittografia delle credenziali DSC:This public key certificate has specific requirements for it to be used for DSC credential encryption:

  1. Utilizzo chiavi :Key Usage :
    • Deve contenere: 'KeyEncipherment' e 'DataEncipherment'.Must contain: 'KeyEncipherment' and 'DataEncipherment'.
    • Non deve contenere: 'Firma digitale'.Should not contain: 'Digital Signature'.
  2. Utilizzo chiavi avanzato :Enhanced Key Usage :
    • Deve contenere: Crittografia documento (1.3.6.1.4.1.311.80.1).Must contain: Document Encryption (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).Should not contain: Client Authentication (1.3.6.1.5.5.7.3.2) and Server Authentication (1.3.6.1.5.5.7.3.1).
  3. La chiave privata per il certificato è disponibile nel *nodo di destinazione_.The Private Key for the certificate is available on the *Target Node_.
  4. Il provider per il certificato deve essere "Microsoft RSA SChannel Cryptographic Provider".The Provider for the certificate must be "Microsoft RSA SChannel Cryptographic Provider".

Importante

Anche se è possibile usare un certificato con l'utilizzo delle chiavi 'Firma digitale' o uno degli EKU di autenticazione, in questo modo la chiave di crittografia sarà più esposta a usi non autorizzati o vulnerabile agli attacchi.Although you can use a certificate containing a Key Usage of 'Digital Signature' or one of the Authentication EKU's, this will enable the encryption key to be more easily misused and vulnerable to attack. È consigliabile usare un certificato creato in modo specifico per la protezione delle credenziali DSC che omette questi utilizzi chiave ed EKU.So it is best practice to use a certificate created specifically for the purpose of securing DSC credentials that omits these Key Usage and EKUs.

Qualsiasi certificato esistente nel nodo di destinazione che soddisfa questi criteri può essere usato per proteggere le credenziali DSC.Any existing certificate on the Target Node that meets these criteria can be used to secure DSC credentials.

Creazione del certificatoCertificate creation

Esistono due approcci per creare e usare il certificato di crittografia richiesto (coppia di chiavi pubblica/privata).There are two approaches you can take to create and use the required Encryption Certificate (public-private key pair).

  1. Creare il certificato nel Nodo di destinazione ed esportare solo la chiave pubblica nel Nodo di creazione.Create it on the Target Node and export just the public key to the Authoring Node
  2. Creare il certificato sul Nodo di creazione ed esportare la coppia di chiavi nel Nodo di destinazione.Create it on the Authoring Node and export the entire key pair to the Target Node

È consigliabile usare il metodo 1 poiché la chiave privata usata per decrittografare le credenziali nel MOF rimane sempre nel nodo di destinazione.Method 1 is recommended because the private key used to decrypt credentials in the MOF stays on the Target Node at all times.

Creazione del certificato sul nodo di destinazioneCreating the Certificate on the Target Node

La chiave privata deve essere mantenuta segreta poiché viene usata per decrittare il MOF nel nodo di destinazione. Il modo più facile per fare ciò è creare il certificato della chiave privata nel nodo di destinazione e copiare il certificato di chiave pubblica sul computer usato per compilare la configurazione DSC in un file MOF.The private key must be kept secret, because is used to decrypt the MOF on the Target Node The easiest way to do that is to create the private key certificate on the Target Node , and copy the public key certificate to the computer being used to author the DSC configuration into a MOF file. L'esempio seguente:The following example:

  1. creare un certificato nel nodo di destinazione.creates a certificate on the Target node
  2. esportare il certificato di chiave pubblica nel nodo di destinazione.exports the public key certificate on the Target node.
  3. importare il certificato di chiave pubblica nell'archivio certificati my del nodo di creazione.imports the public key certificate into the my certificate store on the Authoring node.

Sul nodo di destinazione: creare ed esportare il certificatoOn the Target Node: create and export the certificate

Nodo di destinazione: Windows Server 2016 e Windows 10Target Node: Windows Server 2016 and 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

Dopo l'esportazione, DscPublicKey.cer deve essere copiato nel nodo di creazione.Once exported, the DscPublicKey.cer would need to be copied to the Authoring Node.

Nodo di destinazione: Windows Server 2012 R2/Windows 8.1 e versioni precedentiTarget Node: Windows Server 2012 R2/Windows 8.1 and earlier

Avviso

Poiché il cmdlet New-SelfSignedCertificate nei sistemi operativi Windows precedenti a Windows 10 e Windows Server 2016 non supporta il parametro Type , è richiesto un metodo alternativo per creare il certificato in questi sistemi operativi.Because the New-SelfSignedCertificate cmdlet on Windows Operating Systems prior to Windows 10 and Windows Server 2016 do not support the Type parameter, an alternate method of creating this certificate is required on these operating systems. In questo caso è possibile usare makecert.exe o certutil.exe per creare il certificato.In this case you can use makecert.exe or certutil.exe to create the certificate. In alternativa, è possibile scaricare lo script New-SelfSignedCertificateEx.ps1 da Microsoft Script Center e usarlo per creare il certificato:An alternate method is to download the New-SelfSignedCertificateEx.ps1 script from Microsoft Script Center and use it to create the certificate instead:

# note: These steps need to be performed in an Administrator PowerShell session
# and in the folder that contains New-SelfSignedCertificateEx.ps1
. .\New-SelfSignedCertificateEx.ps1
New-SelfsignedCertificateEx `
    -Subject "CN=${ENV:ComputerName}" `
    -EKU 'Document Encryption' `
    -KeyUsage 'KeyEncipherment, DataEncipherment' `
    -SAN ${ENV:ComputerName} `
    -FriendlyName 'DSC Credential Encryption certificate' `
    -Exportable `
    -StoreLocation 'LocalMachine' `
    -KeyLength 2048 `
    -ProviderName 'Microsoft Enhanced Cryptographic Provider v1.0' `
    -AlgorithmName 'RSA' `
    -SignatureAlgorithm 'SHA256'
# Locate the newly created certificate
$Cert = Get-ChildItem -Path cert:\LocalMachine\My | Where-Object {
        ($_.FriendlyName -eq 'DSC Credential Encryption certificate') -and ($_.Subject -eq "CN=${ENV:ComputerName}")
    } | Select-Object -First 1
# export the public key certificate
$cert | Export-Certificate -FilePath "$env:temp\DscPublicKey.cer" -Force

Dopo l'esportazione, DscPublicKey.cer deve essere copiato nel nodo di creazione.Once exported, the DscPublicKey.cer would need to be copied to the Authoring Node.

Nel nodo di creazione: importare la chiave pubblica del certificatoOn the Authoring Node: import the cert's public key

# Import to the my store
Import-Certificate -FilePath "$env:temp\DscPublicKey.cer" -CertStoreLocation Cert:\LocalMachine\My

Creazione del certificato sul nodo di creazioneCreating the Certificate on the Authoring Node

In alternativa, è possibile creare il certificato di crittografia nel nodo di creazione , esportarlo con la chiave privata come file PFX e quindi importarlo nel nodo di destinazione.Alternately, the encryption certificate can be created on the Authoring Node , exported with the private key as a PFX file and then imported on the Target Node. Questo è il metodo corrente per l'implementazione della crittografia delle credenziali DSC in Nano Server.This is the current method for implementing DSC credential encryption on Nano Server. Anche se il file PFX è protetto da password, è opportuno mantenere il file in sicurezza durante il trasferimento.Although the PFX is secured with a password it should be kept secure during transit. L'esempio seguente:The following example:

  1. creare un certificato nel nodo di creazione.creates a certificate on the Authoring node.
  2. esportare il certificato con la chiave privata nel nodo di creazione.exports the certificate including the private key on the Authoring node.
  3. rimuove la chiave privata dal nodo di creazione , mantenendo il certificato della chiave pubblica nell'archivio My.removes the private key from the Authoring node , but keeps the public key certificate in the my store.
  4. Importare il certificato di chiave privata nell'archivio certificati My(Personal) nel nodo di destinazione.imports the private key certificate into the My(Personal) certificate store on the Target node.
    • È necessario aggiungerlo all'archivio radice in modo che risulti attendibile per il nodo di destinazione.it must be added to the root store so that it will be trusted by the Target node.

Sul nodo di creazione: creare ed esportare il certificatoOn the Authoring Node: create and export the certificate

Nodo di destinazione: Windows Server 2016 e Windows 10Target Node: Windows Server 2016 and 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

Dopo l'esportazione, DscPrivateKey.pfx deve essere copiato nel nodo di destinazione.Once exported, the DscPrivateKey.pfx would need to be copied to the Target Node.

Nodo di destinazione: Windows Server 2012 R2/Windows 8.1 e versioni precedentiTarget Node: Windows Server 2012 R2/Windows 8.1 and earlier

Avviso

Poiché il cmdlet New-SelfSignedCertificate nei sistemi operativi Windows precedenti a Windows 10 e Windows Server 2016 non supporta il parametro Type , è richiesto un metodo alternativo per creare il certificato in questi sistemi operativi.Because the New-SelfSignedCertificate cmdlet on Windows Operating Systems prior to Windows 10 and Windows Server 2016 do not support the Type parameter, an alternate method of creating this certificate is required on these operating systems. In questo caso è possibile usare makecert.exe o certutil.exe per creare il certificato.In this case you can use makecert.exe or certutil.exe to create the certificate. In alternativa, è possibile scaricare lo script New-SelfSignedCertificateEx.ps1 da Microsoft Script Center e usarlo per creare il certificato:An alternate method is to download the New-SelfSignedCertificateEx.ps1 script from Microsoft Script Center and use it to create the certificate instead:

# note: These steps need to be performed in an Administrator PowerShell session
# and in the folder that contains New-SelfSignedCertificateEx.ps1
. .\New-SelfSignedCertificateEx.ps1
New-SelfsignedCertificateEx `
    -Subject "CN=${ENV:ComputerName}" `
    -EKU 'Document Encryption' `
    -KeyUsage 'KeyEncipherment, DataEncipherment' `
    -SAN ${ENV:ComputerName} `
    -FriendlyName 'DSC Credential Encryption certificate' `
    -Exportable `
    -StoreLocation 'LocalMachine' `
    -KeyLength 2048 `
    -ProviderName 'Microsoft Enhanced Cryptographic Provider v1.0' `
    -AlgorithmName 'RSA' `
    -SignatureAlgorithm 'SHA256'
# Locate the newly created certificate
$Cert = Get-ChildItem -Path cert:\LocalMachine\My | Where-Object {
        ($_.FriendlyName -eq 'DSC Credential Encryption certificate') -and ($_.Subject -eq "CN=${ENV:ComputerName}")
    } | Select-Object -First 1
# export the public 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

Nel nodo di destinazione: importare la chiave privata del certificato come radice attendibileOn the Target Node: import the cert's private key as a trusted root

# 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 configurazioneConfiguration data

Il blocco di dati di configurazione definisce i nodi di destinazione su cui operare, se crittografare o meno le credenziali, gli strumenti di crittografia e altre informazioni.The configuration data block defines which target nodes to operate on, whether or not to encrypt the credentials, the means of encryption, and other information. Per altre informazioni sul blocco di dati di configurazione, vedere Separazione dei dati di configurazione e dell'ambiente.For more information on the configuration data block, see Separating Configuration and Environment Data.

Gli elementi che possono essere configurati per ogni nodo correlati alla crittografia delle credenziali sono:The elements that can be configured for each node that are related to credential encryption are:

  • NodeName - nome del nodo di destinazione per cui viene configurata la crittografia delle credenziali.NodeName - the name of the target node that the credential encryption is being configured for.
  • PsDscAllowPlainTextPassword - indica se le credenziali non crittografate potranno essere passate a questo nodo.PsDscAllowPlainTextPassword - whether unencrypted credentials will be allowed to be passed to this node. Si tratta di un' operazione sconsigliata.This is not recommended.
  • Thumbprint - identificazione personale del certificato che verrà usato per decrittografare le credenziali nella configurazione DSC nel nodo di destinazione.Thumbprint - the thumbprint of the certificate that will be used to decrypt the credentials in the DSC Configuration on the Target Node. Questo certificato deve essere presente nell'archivio certificati del computer locale nel nodo di destinazione.This certificate must exist in the Local Machine certificate store on the Target Node.
  • CertificateFile - file di certificato (contenente solo la chiave pubblica) che deve essere usato per crittografare le credenziali per il nodo di destinazione.CertificateFile - the certificate file (containing the public key only) that should be used to encrypt the credentials for the Target Node. Deve trattarsi di un file di certificato in formato X.509 binario con codifica DER o X.509 con codifica Base-64.This must be either a DER encoded binary X.509 or Base-64 encoded X.509 format certificate file.

Questo esempio mostra un blocco di dati di configurazione che specifica un nodo di destinazione su cui operare denominato targetNode, il percorso del file di certificato della chiave pubblica (denominato targetNode.cer) e l'identificazione personale per la chiave pubblica.This example shows a configuration data block that specifies a target node to act on named targetNode, the path to the public key certificate file (named targetNode.cer), and the thumbprint for the public key.

$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 configurazioneConfiguration script

Nello script di configurazione stesso usare il parametro PsCredential per specificare che le credenziali devono essere archiviate per il periodo di tempo più breve possibile.In the configuration script itself, use the PsCredential parameter to ensure that credentials are stored for the shortest possible time. Quando si esegue l'esempio fornito, DSC chiede le credenziali e quindi crittografa il file MOF usando la risorsa CertificateFile associata al nodo di destinazione nel blocco di dati di configurazione.When you run the supplied example, DSC will prompt you for credentials and then encrypt the MOF file using the CertificateFile that is associated with the target node in the configuration data block. Questo esempio di codice copia un file da una condivisione protetta a un utente.This code example copies a file from a share that is secured to a user.

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

Configurazione della decrittografiaSetting up decryption

Perché Start-DscConfiguration possa funzionare correttamente, è necessario indicare a Gestione configurazione locale in ogni nodo di destinazione il certificato da usare per decrittografare le credenziali, usando la risorsa CertificateID per verificare l'identificazione personale del certificato.Before Start-DscConfiguration can work, you have to tell the Local Configuration Manager on each target node which certificate to use to decrypt the credentials, using the CertificateID resource to verify the certificate's thumbprint. Questa funzione di esempio trova il certificato locale appropriato e potrebbe dover essere personalizzata perché trovi l'esatto certificato che si vuole usare:This example function will find the appropriate local certificate (you might have to customize it so it will find the exact certificate you want to use):

# 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 indicato dall'identificazione personale, lo script di configurazione può essere aggiornato in modo da usare il valore:With the certificate identified by its thumbprint, the configuration script can be updated to use the value:

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 configurazioneRunning the configuration

A questo punto, è possibile eseguire la configurazione, che genera due file:At this point, you can run the configuration, which will output two files:

  • Un file*.meta.mof che configura Gestione configurazione locale per decrittografare le credenziali usando il certificato archiviato nell'archivio del computer locale e indicato dalla relativa identificazione personale.A *.meta.mof file that configures the Local Configuration Manager to decrypt the credentials using the certificate that is stored on the local machine store and identified by its thumbprint. Set-DscLocalConfigurationManager applica il file*.meta.mof .Set-DscLocalConfigurationManager applies the *.meta.mof file.
  • Un file MOF che applica effettivamente la configurazione.A MOF file that actually applies the configuration. Start-DscConfiguration applica la configurazione.Start-DscConfiguration applies the configuration.

I comandi seguenti eseguono questi passaggi:These commands will accomplish those steps:

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

Questo esempio eseguirebbe il push della configurazione DSC al nodo di destinazione.This example would push the DSC configuration to the target node. La configurazione DSC può essere applicata anche tramite un server di pull DSC, se disponibile.The DSC configuration can also be applied using a DSC Pull Server if one is available.

Vedere Configurazione di un client di pull DSC per altre informazioni sull'applicazione delle configurazioni DSC tramite un server di pull DSC.See Setting up a DSC pull client for more information on applying DSC configurations using a DSC Pull Server.

Esempio di modulo di crittografia delle credenzialiCredential Encryption Module Example

Ecco un esempio completo che contiene tutti i passaggi, insieme a un cmdlet helper che esporta e copia le chiavi pubbliche:Here is a full example that incorporates all of these steps, plus a helper cmdlet that exports and copies the public keys:

# 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