Dela via


Så här signerar du konfigurationspaket för datorer

Anpassade principer för datorkonfiguration använder SHA256-hash för att verifiera att princippaketet inte har ändrats. Alternativt kan kunder också använda ett certifikat för att signera paket och tvinga datorkonfigurationstillägget att endast tillåta signerat innehåll.

För att aktivera det här scenariot finns det två steg som du måste slutföra. Kör cmdleten för att signera innehållspaketet och lägg till en tagg på datorerna som ska kräva att koden signeras.

Signaturverifiering med hjälp av ett kodsigneringscertifikat

Om du vill använda funktionen Signaturverifiering kör du cmdleten Protect-GuestConfigurationPackage för att signera paketet innan det publiceras. Den här cmdleten kräver ett "kodsigneringscertifikat". Om du inte har ett "kodsigneringscertifikat" använder du följande skript för att skapa ett självsignerat certifikat i testsyfte för att följa med i exemplet.

Validering av Windows-signatur

# How to create a self sign cert and use it to sign Machine Configuration
# custom policy package

# Create Code signing cert
$codeSigningParams = @{
    Type          = 'CodeSigningCert'
    DnsName       = 'GCEncryptionCertificate'
    HashAlgorithm = 'SHA256'
}
$mycert = New-SelfSignedCertificate @codeSigningParams

# Export the certificates
$mypwd = ConvertTo-SecureString -String "Password1234" -Force -AsPlainText
$mycert | Export-PfxCertificate -FilePath C:\demo\GCPrivateKey.pfx -Password $mypwd
$mycert | Export-Certificate -FilePath "C:\demo\GCPublicKey.cer" -Force

# Import the certificate
$importParams = @{
    FilePath          = 'C:\demo\GCPrivateKey.pfx'
    Password          = $mypwd
    CertStoreLocation = 'Cert:\LocalMachine\My'
}
Import-PfxCertificate @importParams

# Sign the policy package
$certToSignThePackage = Get-ChildItem -Path cert:\LocalMachine\My |
    Where-Object { $_.Subject-eq "CN=GCEncryptionCertificate" }
$protectParams = @{
    Path        = 'C:\demo\AuditWindowsService.zip'
    Certificate = $certToSignThePackage
    Verbose     = $true
}
Protect-GuestConfigurationPackage @protectParams

Validering av Linux-signatur

# generate gpg key
gpg --gen-key

# export public key
gpg --output public.gpg --export <email-id-used-to-generate-gpg-key>

# export private key
gpg --output private.gpg --export-secret-key <email-id-used-to-generate-gpg-key>

# Sign linux policy package
Import-Module GuestConfiguration
$protectParams = @{
    Path              = './not_installed_application_linux.zip'
    PrivateGpgKeyPath = './private.gpg'
    PublicGpgKeyPath  = './public.gpg'
    Verbose           = $true
}
Protect-GuestConfigurationPackage

Cmdletens Protect-GuestConfigurationPackage parametrar:

  • Sökväg: Fullständig sökväg för datorkonfigurationspaketet.
  • Certifikat: Kodsigneringscertifikat för att signera paketet. Den här parametern stöds endast vid signering av innehåll för Windows.

Certifikatkrav

Datorkonfigurationsagenten förväntar sig att certifikatets offentliga nyckel finns i "Betrodda utgivare" på Windows-datorer och i sökvägen /usr/local/share/ca-certificates/gc på Linux-datorer. För att noden ska verifiera signerat innehåll installerar du den offentliga certifikatnyckeln på datorn innan du tillämpar den anpassade principen. Den här processen kan göras med valfri teknik på den virtuella datorn eller med hjälp av Azure Policy. Det finns en exempelmall för att distribuera en dator med ett certifikat. Åtkomstprincipen för Key Vault måste tillåta beräkningsresursprovidern att komma åt certifikat under distributioner. Detaljerade steg finns i Konfigurera Key Vault för virtuella datorer i Azure Resource Manager.

Följande är ett exempel för att exportera den offentliga nyckeln från ett signeringscertifikat för att importera till datorn.

$Cert = Get-ChildItem -Path cert:\LocalMachine\My |
    Where-Object { $_.Subject-eq "CN=mycert3" } |
    Select-Object -First 1
$Cert | Export-Certificate -FilePath "$env:temp\DscPublicKey.cer" -Force

Taggkrav

När innehållet har publicerats lägger du till en tagg med namn GuestConfigPolicyCertificateValidation och värde enabled på alla virtuella datorer där kodsignering ska krävas. Se Taggexempel för hur taggar kan levereras i stor skala med hjälp av Azure Policy. När den här taggen är på plats aktiverar principdefinitionen New-GuestConfigurationPolicy som genereras med hjälp av cmdleten kravet via datorkonfigurationstillägget.