Het MOF-bestand te beveiligenSecuring the MOF File

Van toepassing op: Windows PowerShell 4.0, Windows PowerShell 5.0Applies To: Windows PowerShell 4.0, Windows PowerShell 5.0

DSC wordt de configuratie van server-knooppunten beheerd door toe te passen die zijn opgeslagen in een MOF-bestand, waarbij de lokale Configuration Manager (LCM) de status van de gewenste end implementeert.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. Omdat dit bestand de details van de configuratie bevat, is het belangrijk om veilig te houden.Because this file contains the details of the configuration, it’s important to keep it secure. In dit onderwerp wordt beschreven hoe om te controleren of het doelknooppunt het bestand is versleuteld.This topic describes how to ensure the target node has encrypted the file.

Beginnen met de PowerShell-versie 5.0, het gehele MOF-bestand is standaard versleuteld wanneer deze wordt toegepast op het knooppunt met behulp van de Start-DSCConfiguration cmdlet.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. De procedure beschreven in dit artikel is vereist alleen bij het implementeren van een oplossing met behulp van de pull-service-protocol als certificaten niet worden beheerd, om te controleren of de configuraties die zijn gedownload door het doelknooppunt kunnen worden ontsleuteld en worden gelezen door het systeem voordat ze worden toegepast (bijvoorbeeld de pull-service beschikbaar is 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). Knooppunten die zijn geregistreerd bij Azure Automation DSC automatisch certificaten geïnstalleerd en beheerd door de service met geen administratieve overhead vereist.Nodes registered to Azure Automation DSC will automatically have certificates installed and managed by the service with no administrative overhead required.

Notitie

In dit onderwerp worden de certificaten die worden gebruikt voor versleuteling.This topic discusses certificates used for encryption. Voor versleuteling, wordt een zelfondertekend certificaat voldoende is, omdat de persoonlijke sleutel wordt altijd bewaard geheim en versleuteling impliceert geen vertrouwen in het document.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. Zelfondertekende certificaten moeten niet worden gebruikt voor verificatiedoeleinden wordt gebruikt.Self-signed certificates should not be used for authentication purposes. U moet een certificaat van een vertrouwde certificeringsinstantie (CA) gebruiken voor verificatiedoeleinden.You should use a certificate from a trusted Certification Authority (CA) for any authentication purposes.

VereistenPrerequisites

Voor het versleutelen is van de referenties die worden gebruikt voor het beveiligen van een DSC-configuratie, zorg ervoor dat u het volgende:To successfully encrypt the credentials used to secure a DSC configuration, make sure you have the following:

  • Een manier van uitgeven en distribueren van certificaten.Some means of issuing and distributing certificates. In dit onderwerp en de voorbeelden wordt ervan uitgegaan dat u gebruikmaakt van Active Directory-certificeringsinstantie.This topic and its examples assume you are using Active Directory Certification Authority. Zie voor meer achtergrondinformatie over Active Directory Certificate Services, overzicht van Active Directory Certificate Services en Active Directory Certificate Services 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.
  • Beheerderstoegang tot het doelknooppunt of knooppunten.Administrative access to the target node or nodes.
  • Elk doelknooppunt heeft een versleuteling geschikt certificaat opgeslagen van de persoonlijke Store.Each target node has an encryption-capable certificate saved its Personal Store. In Windows PowerShell is het pad naar de store Cert: \LocalMachine\My.In Windows PowerShell, the path to the store is Cert:\LocalMachine\My. De voorbeelden in dit onderwerp gebruikt u de sjabloon "verificatie van werkstation" die u (samen met andere certificaatsjablonen vinden kunt) op standaardcertificaatsjablonen.The examples in this topic use the “workstation authentication” template, which you can find (along with other certificate templates) at Default Certificate Templates.
  • Als u deze configuratie op een andere computer dan het doelknooppunt uitvoert Exporteer de openbare sleutel van het certificaat, en vervolgens importeren naar de computer die u de configuratie wordt uitgevoerd.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. Zorg ervoor dat u alleen exporteert de openbare sleutel; de persoonlijke sleutel te beveiligen.Make sure that you export only the public key; keep the private key secure.

Algehele procesOverall process

  1. Instellen van de certificaten, sleutels en vingerafdrukken, ervoor te zorgen dat elk doelknooppunt kopieën van het certificaat heeft en de configuratie-computer de openbare sleutel en de vingerafdruk heeft.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. Maak een configuratie-gegevensblokken die het pad en de vingerafdruk van de openbare sleutel bevat.Create a configuration data block that contains the path and thumbprint of the public key.
  3. Maakt een configuratiescript die definieert de gewenste configuratie op voor het doelknooppunt en decodering van de doelknooppunten ingesteld door de lokale configuratie appautonomie manager om de van configuratiegegevens met behulp van het certificaat en de vingerafdruk te ontsleutelen.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. Voer de configuratie, waardoor de Local Configuration Manager-instellingen en start de DSC-configuratie.Run the configuration, which will set the Local Configuration Manager settings and start the DSC configuration.

Diagram1

Vereisten voor certificatenCertificate Requirements

Als u wilt gerapporteerd versleuteling van referenties, een openbare-sleutelcertificaat moet beschikbaar zijn op de doelknooppunt dat wil zeggen vertrouwde door de computer die wordt gebruikt voor het maken van de DSC-configuratie.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. Deze openbare-sleutelcertificaat dat heeft specifieke vereisten voor de oplossing worden gebruikt voor versleuteling van de DSC-referenties:This public key certificate has specific requirements for it to be used for DSC credential encryption:

  1. Sleutelgebruik:Key Usage:
    • Moet bevatten: 'Keyencipherment-bit' en 'DataEncipherment'.Must contain: 'KeyEncipherment' and 'DataEncipherment'.
    • Moet niet bevatten: 'Digitale handtekening'.Should not contain: 'Digital Signature'.
  2. Enhanced Key Usage:Enhanced Key Usage:
    • Moet bevatten: Document-versleuteling (1.3.6.1.4.1.311.80.1).Must contain: Document Encryption (1.3.6.1.4.1.311.80.1).
    • Moet niet bevatten: clientverificatie (1.3.6.1.5.5.7.3.2) en serververificatie (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. De persoonlijke sleutel voor het certificaat is beschikbaar op de * Node_ doel.The Private Key for the certificate is available on the *Target Node_.
  4. De Provider voor het certificaat moet 'Microsoft RSA SChannel Cryptographic Provider'.The Provider for the certificate must be "Microsoft RSA SChannel Cryptographic Provider".

Belangrijk

Maar u een certificaat gebruiken kunt met die van een Sleutelgebruik 'Digitale handtekening' of een van de clientverificatie-EKU, schakelt Hiermee u de versleutelingssleutel moet eenvoudiger misbruik en kwetsbaar voor aanvallen.Although you can use a certificate with 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. Het is dus aanbevolen procedure om een certificaat gemaakt voor de beveiliging van de DSC-referenties die worden weggelaten deze sleutelgebruik en EKU's te gebruiken.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.

Alle bestaande certificaten op de doelknooppunt dat voldoet aan deze criteria kunnen worden gebruikt voor beveiligde DSC-referenties.Any existing certificate on the Target Node that meets these criteria can be used to secure DSC credentials.

Het maken van certificatenCertificate creation

Er zijn twee manieren om te maken en gebruiken van het vereiste certificaat voor versleuteling (openbaar / persoonlijk sleutelpaar).There are two approaches you can take to create and use the required Encryption Certificate (public-private key pair).

  1. Maken door op de doelknooppunt en exporteren van de openbare sleutel voor de knooppunt ontwerpenCreate it on the Target Node and export just the public key to the Authoring Node
  2. Maken door op de ontwerpen knooppunt en exporteren van het gehele sleutelpaar aan de doelknooppuntCreate it on the Authoring Node and export the entire key pair to the Target Node

Methode 1 wordt aanbevolen omdat de persoonlijke sleutel voor het ontsleutelen van de referenties in het MOF op het doelknooppunt te allen tijde blijft.Method 1 is recommended because the private key used to decrypt credentials in the MOF stays on the Target Node at all times.

Het maken van het certificaat op het doelknooppuntCreating the Certificate on the Target Node

De privésleutel geheim moet blijven, omdat wordt gebruikt voor het ontsleutelen van de MOF op de doelknooppunt de eenvoudigste manier om dat te doen is om te maken van het certificaat met persoonlijke sleutel op de doelknooppunt, en kopieer de openbare-sleutelcertificaat op de computer die wordt gebruikt voor het maken van de DSC-configuratie naar een MOF-bestand.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. Het volgende voorbeeld:The following example:

  1. Hiermee maakt u een certificaat op de doelknooppuntcreates a certificate on the Target node
  2. Hiermee exporteert u de openbare-sleutelcertificaat dat op de doelknooppunt.exports the public key certificate on the Target node.
  3. de invoer van de openbare-sleutelcertificaat dat in de mijn certificaatarchief op de ontwerpen knooppunt.imports the public key certificate into the my certificate store on the Authoring node.

Op het doelknooppunt: maken en exporteren van het certificaatOn the Target Node: create and export the certificate

Doelknooppunt: De WindowsServer 2016 en 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

Eenmaal hebt geëxporteerd, de DscPublicKey.cer moet worden gekopieerd naar de ontwerpen knooppunt.Once exported, the DscPublicKey.cer would need to be copied to the Authoring Node.

Doelknooppunt: Windows Server 2012 R2/Windows 8.1 en oudere versiesTarget Node: Windows Server 2012 R2/Windows 8.1 and earlier

Waarschuwing

Omdat de New-SelfSignedCertificate cmdlet op Windows-besturingssystemen vóór Windows 10 en Windows Server 2016 bieden geen ondersteuning voor de Type parameter, een alternatieve methode voor het maken van dit certificaat is vereist op deze besturingssystemen.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 dit geval kunt u makecert.exe of certutil.exe om het certificaat te maken.In this case you can use makecert.exe or certutil.exe to create the certificate.

Is een alternatieve methode het script New-SelfSignedCertificateEx.ps1 downloaden vanaf Microsoft Script Center en voor het maken van het certificaat in plaats daarvan het: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

Eenmaal hebt geëxporteerd, de DscPublicKey.cer moet worden gekopieerd naar de ontwerpen knooppunt.Once exported, the DscPublicKey.cer would need to be copied to the Authoring Node.

Op het knooppunt ontwerpen: de openbare sleutel van het certificaat importerenOn 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

Het maken van het certificaat op het knooppunt ontwerpenCreating the Certificate on the Authoring Node

U kunt ook het versleutelingscertificaat dat kan worden gemaakt op de ontwerpen knooppunt, geëxporteerd met de privésleutel als een PFX-bestand en vervolgens worden geïmporteerd op de doelknooppunt.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. Dit is de huidige methode voor het implementeren van DSC-referentieversleuteling op Nano Server.This is the current method for implementing DSC credential encryption on Nano Server. Hoewel de PFX is beveiligd met een wachtwoord moet het worden gehouden beveiligd tijdens de overdracht.Although the PFX is secured with a password it should be kept secure during transit. Het volgende voorbeeld:The following example:

  1. Hiermee maakt u een certificaat op de ontwerpen knooppunt.creates a certificate on the Authoring node.
  2. Hiermee exporteert u het certificaat met inbegrip van de persoonlijke sleutel op de ontwerpen knooppunt.exports the certificate including the private key on the Authoring node.
  3. Hiermee verwijdert u de persoonlijke sleutel van de ontwerpen knooppunt, maar houdt u de openbare-sleutelcertificaat dat de mijn opslaan.removes the private key from the Authoring node, but keeps the public key certificate in the my store.
  4. het certificaat met persoonlijke sleutel wordt geïmporteerd in het certificaatarchief My(Personal) op de doelknooppunt.imports the private key certificate into the My(Personal) certificate store on the Target node.
    • Deze moet worden toegevoegd aan het basisarchief zodat deze worden vertrouwd door de doelknooppunt.it must be added to the root store so that it will be trusted by the Target node.

Op het knooppunt ontwerpen: maken en exporteren van het certificaatOn the Authoring Node: create and export the certificate

Doelknooppunt: De WindowsServer 2016 en 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

Eenmaal hebt geëxporteerd, de DscPrivateKey.pfx moet worden gekopieerd naar de doelknooppunt.Once exported, the DscPrivateKey.pfx would need to be copied to the Target Node.

Doelknooppunt: Windows Server 2012 R2/Windows 8.1 en oudere versiesTarget Node: Windows Server 2012 R2/Windows 8.1 and earlier

Waarschuwing

Omdat de New-SelfSignedCertificate cmdlet op Windows-besturingssystemen vóór Windows 10 en Windows Server 2016 bieden geen ondersteuning voor de Type parameter, een alternatieve methode voor het maken van dit certificaat is vereist op deze besturingssystemen.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 dit geval kunt u makecert.exe of certutil.exe om het certificaat te maken.In this case you can use makecert.exe or certutil.exe to create the certificate.

Is een alternatieve methode het script New-SelfSignedCertificateEx.ps1 downloaden vanaf Microsoft Script Center en voor het maken van het certificaat in plaats daarvan het: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

Op het doelknooppunt: de persoonlijke sleutel van het certificaat als een vertrouwd basiscertificaat importerenOn 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

ConfiguratiegegevensConfiguration data

Het gegevensblok configuratie definieert welke doelknooppunten bewerkingen uitvoeren, of of niet voor het versleutelen van de referenties, de wijze van versleuteling en andere informatie.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. Zie voor meer informatie over het gegevensblok configuratie scheiden van configuratie- en omgevingsgegevens.For more information on the configuration data block, see Separating Configuration and Environment Data.

De elementen die kunnen worden geconfigureerd voor elk knooppunt die gerelateerd zijn aan de versleuteling van referenties zijn:The elements that can be configured for each node that are related to credential encryption are:

  • Knooppuntnaam -de naam van het doelknooppunt die voor de versleuteling van referenties wordt geconfigureerd.NodeName - the name of the target node that the credential encryption is being configured for.
  • PsDscAllowPlainTextPassword - of niet-versleutelde referenties worden doorgegeven aan dit knooppunt kunnen worden.PsDscAllowPlainTextPassword - whether unencrypted credentials will be allowed to be passed to this node. Dit is niet aanbevolen.This is not recommended.
  • Vingerafdruk -de vingerafdruk van het certificaat dat wordt gebruikt voor het ontsleutelen van de referenties in de DSC-configuratie op de doelknooppunt.Thumbprint - the thumbprint of the certificate that will be used to decrypt the credentials in the DSC Configuration on the Target Node. Dit certificaat moet zich in het certificaatarchief van lokale computer op het doelknooppunt.This certificate must exist in the Local Machine certificate store on the Target Node.
  • CertificateFile - het certificaatbestand (met alleen de openbare sleutel) die moet worden gebruikt voor het versleutelen van de referenties voor de doelknooppunt.CertificateFile - the certificate file (containing the public key only) that should be used to encrypt the credentials for the Target Node. Dit moet ofwel een DER encoded binary X.509 of Base-64 gecodeerde x.509-certificaat indelingsbestand.This must be either a DER encoded binary X.509 or Base-64 encoded X.509 format certificate file.

Dit voorbeeld toont een configuratie-gegevensblokken die Hiermee geeft u een doelknooppunt om te reageren op met de naam targetNode, het pad naar het openbare-sleutelcertificaat dat bestand (met de naam targetNode.cer) en de vingerafdruk voor de openbare sleutel.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"
            };
        );
    }

Het script voor configuratieConfiguration script

In het configuratiescript zelf, gebruikt u de PsCredential parameter om ervoor te zorgen dat de referenties voor de kortst mogelijke tijd worden opgeslagen.In the configuration script itself, use the PsCredential parameter to ensure that credentials are stored for the shortest possible time. Wanneer u het opgegeven voorbeeld uitvoert, wordt DSC u gevraagd om referenties en deze vervolgens versleutelen het MOF-bestand met behulp van de CertificateFile die is gekoppeld aan het doelknooppunt in het gegevensblok configuratie.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. Dit codevoorbeeld wordt een bestand gekopieerd van een share die wordt beveiligd voor een gebruiker.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
        }
    }
}

Instellen van ontsleutelingSetting up decryption

Voordat u Start-DscConfiguration kunt werken, hebt u vertelt de Local Configuration Manager op elk doelknooppunt welk certificaat moet worden gebruikt voor het decoderen van de referenties met behulp van de resource CertificateID om te controleren of de vingerafdruk van het certificaat.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. Deze voorbeeldfunctie vindt u de juiste lokale certificaatarchief (mogelijk moet u deze aanpassen, dus het exacte certificaat dat u wilt gebruiken):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
        }
    }
}

Met het certificaat dat wordt geïdentificeerd door de vingerafdruk, kan het configuratiescript worden bijgewerkt om de waarde te gebruiken: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
        }
    }
}

De configuratie wordt uitgevoerdRunning the configuration

Op dit moment kunt u de configuratie, die wordt uitgevoerd twee bestanden uitvoeren:At this point, you can run the configuration, which will output two files:

  • Een *. meta.mof-bestand dat Hiermee configureert u de Local Configuration Manager voor het ontsleutelen van de referenties met behulp van het certificaat dat is opgeslagen in het archief van de lokale computer en die worden vermeld op basis van de miniatuur.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 van toepassing is de *. meta.mof-bestand.Set-DscLocalConfigurationManager applies the *.meta.mof file.
  • Een MOF-bestand dat de configuratie geldt.A MOF file that actually applies the configuration. Start-DscConfiguration geldt de configuratie.Start-DscConfiguration applies the configuration.

Deze opdrachten wordt deze stappen uitvoeren: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

In dit voorbeeld zou de DSC-configuratie om het doelknooppunt te pushen.This example would push the DSC configuration to the target node. De DSC-configuratie kan ook worden toegepast met behulp van een DSC-Pull-Server als deze beschikbaar is.The DSC configuration can also be applied using a DSC Pull Server if one is available.

Zie instellen van een DSC-pull-client voor meer informatie over het toepassen van DSC-configuraties met behulp van een DSC-Pull-Server.See Setting up a DSC pull client for more information on applying DSC configurations using a DSC Pull Server.

Voorbeeld van de Module referentie-coderingCredential Encryption Module Example

Hier volgt een compleet voorbeeld waarin al deze stappen, plus een helper-cmdlet die worden geëxporteerd en de openbare sleutels worden gekopieerd: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