Az MOF-fájl biztonságossá tétele
A következőkre vonatkozik: Windows PowerShell 4.0, Windows PowerShell 5.0
A DSC egy MOF-fájlban tárolt információk alkalmazásával kezeli a kiszolgálócsomópontok konfigurációját, ahol a Helyi Configuration Manager (LCM) a kívánt befejezési állapotot valósítja meg. Mivel ez a fájl tartalmazza a konfiguráció részleteit, fontos, hogy biztonságos legyen. Ez a cikk azt ismerteti, hogyan biztosítható, hogy a célcsomópont titkosította a fájlt.
A PowerShell 5.0-s verziójától kezdve a rendszer alapértelmezés szerint a teljes MOF-fájlt titkosítja, amikor a parancsmaggal alkalmazza a Start-DSCConfiguration
csomópontra. Az ebben a cikkben leírt folyamat csak akkor szükséges, ha a lekéréses szolgáltatás protokollját használva implementál egy megoldást, ha a tanúsítványokat nem kezelik, annak érdekében, hogy a célcsomópont által letöltött konfigurációk visszafejthetők és olvashatók legyenek a rendszer számára az alkalmazás előtt (például a Windows Serverben elérhető lekéréses szolgáltatás). A Azure Automation DSC-ben regisztrált csomópontokon a szolgáltatás automatikusan telepíti és felügyeli a tanúsítványokat, és nincs szükség rendszergazdai többletterhelésre.
Megjegyzés
Ez a témakör a titkosításhoz használt tanúsítványokat ismerteti. A titkosításhoz elegendő az önaláírt tanúsítvány, mert a titkos kulcs mindig titkos, és a titkosítás nem jelenti a dokumentum megbízhatóságát. Az önaláírt tanúsítványok nem használhatók hitelesítési célokra. A hitelesítéshez megbízható hitelesítésszolgáltatótól származó tanúsítványt kell használnia.
Előfeltételek
A DSC-konfiguráció biztonságossá tételéhez használt hitelesítő adatok sikeres titkosításához győződjön meg arról, hogy rendelkezik a következővel:
- A tanúsítványok kiadásának és terjesztésének néhány módja. Ez a témakör és a példák feltételezik, hogy Az Active Directory hitelesítésszolgáltatót használja. Az Active Directory tanúsítványszolgáltatásokkal kapcsolatos további háttérinformációkért lásd: Active Directory tanúsítványszolgáltatások áttekintése.
- Rendszergazdai hozzáférés a célcsomóponthoz vagy csomópontokhoz.
- Minden célcsomópont rendelkezik egy titkosításra képes tanúsítvánnyal, amely mentette a személyes tárolóját. A Windows PowerShell az áruház elérési útja a Cert:\LocalMachine\My. A jelen témakörben szereplő példák a "munkaállomás-hitelesítés" sablont használják, amelyet (más tanúsítványsablonokkal együtt) az Alapértelmezett tanúsítványsablonok területen talál.
- Ha ezt a konfigurációt a célcsomóponttól eltérő számítógépen fogja futtatni, exportálja a tanúsítvány nyilvános kulcsát, majd importálja azt arra a számítógépre, amelyről a konfigurációt futtatni fogja. Győződjön meg arról, hogy csak a nyilvános kulcsot exportálja; tartsa biztonságban a titkos kulcsot.
Megjegyzés
A szkripterőforrásoknak a titkosításra vonatkozó korlátozások vannak érvényben. További információ: Szkripterőforrás
Teljes folyamat
- Állítsa be a tanúsítványokat, kulcsokat és ujjlenyomatokat, és győződjön meg arról, hogy minden célcsomópont rendelkezik a tanúsítvány másolatával, és a konfigurációs számítógép rendelkezik a nyilvános kulccsal és ujjlenyomattal.
- Hozzon létre egy konfigurációs adatblokkot, amely tartalmazza a nyilvános kulcs elérési útját és ujjlenyomatát.
- Hozzon létre egy konfigurációs szkriptet, amely meghatározza a célcsomópont kívánt konfigurációját, és beállítja a visszafejtést a célcsomópontokon a Helyi konfigurációkezelő parancsával a konfigurációs adatok a tanúsítvány és az ujjlenyomat használatával történő visszafejtéséhez.
- Futtassa a konfigurációt, amely beállítja a Helyi Configuration Manager beállításokat, és elindítja a DSC-konfigurációt.
Tanúsítványokkal kapcsolatos követelmények
A hitelesítő adatok titkosításának létrehozásához nyilvános kulcsú tanúsítványnak kell rendelkezésre állnia a célcsomóponton , amelyet a DSC-konfiguráció létrehozásához használt számítógép megbízhatónak talál. Ez a nyilvános kulcsú tanúsítvány speciális követelményekkel rendelkezik a DSC hitelesítő adatok titkosításához való használatához:
- Kulcshasználat:
- Tartalmaznia kell a következőt: "KeyEncipherment" és "DataEncipherment".
- A következőt nem tartalmazhatja: "Digitális aláírás".
- Továbbfejlesztett kulcshasználat:
- Tartalmaznia kell: Dokumentumtitkosítás (1.3.6.1.4.1.311.80.1).
- Nem tartalmazhat: ügyfél-hitelesítés (1.3.6.1.5.5.7.3.2) és kiszolgálói hitelesítés (1.3.6.1.5.5.7.3.1).
- A tanúsítvány titkos kulcsa a *Cél Node_ érhető el.
- A tanúsítvány szolgáltatójának "Microsoft RSA SChannel titkosítási szolgáltatónak" kell lennie.
Fontos
Bár használhat olyan tanúsítványt, amely tartalmazza a "digitális aláírás" kulcshasználatát vagy a hitelesítési EKU-k egyikét, ez lehetővé teszi, hogy a titkosítási kulcs használata egyszerűbb legyen, és sebezhetőbb legyen a támadásokkal szemben. Ezért ajánlott olyan tanúsítványt használni, amelyet kifejezetten a DSC hitelesítő adatainak védelmére hoztak létre, amely kihagyja ezeket a kulcshasználatot és EKU-kat.
A célcsomópont minden olyan meglévő tanúsítványa, amely megfelel ezeknek a feltételeknek, használható a DSC hitelesítő adatainak védelmére.
Tanúsítvány létrehozása
A szükséges titkosítási tanúsítvány (nyilvános-privát kulcspár) létrehozásához és használatához két módszer közül választhat.
- Hozza létre a célcsomóponton , és exportálja csak a nyilvános kulcsot a szerzői csomópontba
- Hozza létre a szerzői csomóponton , és exportálja a teljes kulcspárt a célcsomópontba
Az 1. módszer azért ajánlott, mert az MOF hitelesítő adatainak visszafejtéséhez használt titkos kulcs mindig a célcsomóponton marad.
A tanúsítvány létrehozása a célcsomóponton
A titkos kulcsot titokban kell tartani, mert a célcsomópont MOF-jának visszafejtésére szolgál. Ennek legegyszerűbb módja a titkos kulcs tanúsítványának létrehozása a célcsomóponton, és a nyilvános kulcs tanúsítványának másolása a DSC-konfiguráció MOF-fájlba való létrehozásához használt számítógépre. Az alábbi példa:
- létrehoz egy tanúsítványt a Célcsomóponton
- exportálja a nyilvános kulcs tanúsítványát a Cél csomóponton.
- importálja a nyilvános kulcsú tanúsítványt a saját tanúsítványtárolóba a Szerzői csomóponton.
A célcsomóponton: hozza létre és exportálja a tanúsítványt
Célcsomópont: Windows Server 2016 és 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
Az exportálás után az DscPublicKey.cer
értéket át kell másolni a szerzői csomópontra.
A szerzői csomóponton: importálja a tanúsítvány nyilvános kulcsát
# Import to the my store
Import-Certificate -FilePath "$env:temp\DscPublicKey.cer" -CertStoreLocation Cert:\LocalMachine\My
A tanúsítvány létrehozása a szerzői csomóponton
Másik lehetőségként létrehozható a titkosítási tanúsítvány a szerzői csomóponton, a titkos kulccsal PFX-fájlként exportálható, majd importálható a célcsomópontra. Ez az aktuális módszer a DSC hitelesítő adatok titkosításának a Nano Serveren történő implementálásához. Bár a PFX-et jelszó védi, az átvitel során biztonságosnak kell lennie. Az alábbi példa:
- létrehoz egy tanúsítványt a Szerzői csomóponton.
- exportálja a tanúsítványt, beleértve a szerzői csomópont titkos kulcsát is.
- eltávolítja a titkos kulcsot a Szerzői csomópontról, de a nyilvános kulcs tanúsítványát a saját tárolóban tartja.
- importálja a titkoskulcs-tanúsítványt a Cél csomópont My(Personal) tanúsítványtárolójába.
- Hozzá kell adni a gyökértárolóhoz, hogy a célcsomópont megbízható legyen.
A szerzői csomóponton: hozza létre és exportálja a tanúsítványt
Célcsomópont: Windows Server 2016 és 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
Az exportálás után a DscPrivateKey.pfx
célcsomópontra kell másolni.
A célcsomóponton: a tanúsítvány titkos kulcsának importálása megbízható gyökérként
# 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
Konfigurációs adatok
A konfigurációs adatblokk meghatározza, hogy mely célcsomópontokon kell működnie, függetlenül attól, hogy titkosítja-e a hitelesítő adatokat, a titkosítás módját és egyéb információkat. További információ a konfigurációs adatblokkról: Konfigurációs és környezeti adatok elkülönítése.
A hitelesítő adatok titkosításához kapcsolódó összes csomóponthoz konfigurálható elemek a következők:
- NodeName – annak a célcsomópontnak a neve, amelyre a hitelesítő adatok titkosítása konfigurálva van.
- PsDscAllowPlainTextPassword – azt jelzi, hogy a titkosítatlan hitelesítő adatok átadhatók-e ehhez a csomóponthoz. Ez nem ajánlott.
- Ujjlenyomat – annak a tanúsítványnak az ujjlenyomata, amely a célcsomópont DSC-konfigurációjában található hitelesítő adatok visszafejtésére szolgál. Ennek a tanúsítványnak a helyi gép tanúsítványtárolójában kell lennie a célcsomóponton.
- CertificateFile – az a tanúsítványfájl (amely csak a nyilvános kulcsot tartalmazza), amelyet a célcsomópont hitelesítő adatainak titkosításához kell használni. Ennek der kódolású bináris X.509 vagy Base-64 kódolású X.509 formátumú tanúsítványfájlnak kell lennie.
Ez a példa egy konfigurációs adatblokkot mutat be, amely meghatározza a célcsomópontot, amely a nevesített targetNode-on, a nyilvános kulcsú tanúsítványfájl elérési útját (targetNode.cer néven) és a nyilvános kulcs ujjlenyomatát határozza meg.
$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"
}
)
}
Konfigurációs szkript
A konfigurációs szkriptben használja a PsCredential
paramétert annak biztosítására, hogy a hitelesítő adatok a lehető legrövidebb ideig legyenek tárolva. A megadott példa futtatásakor a DSC hitelesítő adatokat kér, majd titkosítja az MOF-fájlt a konfigurációs adatblokk célcsomópontjához társított CertificateFile használatával. Ez a példakód egy felhasználó számára védett megosztásból másol át egy fájlt.
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
}
}
}
Visszafejtés beállítása
Mielőtt a Start-DscConfiguration működőképes lenne, meg kell adnia a helyi Configuration Manager minden célcsomóponton, hogy melyik tanúsítványt használja a hitelesítő adatok visszafejtéséhez a Tanúsítványazonosító erőforrás használatával a tanúsítvány ujjlenyomatának ellenőrzéséhez. Ez a példafüggvény megkeresi a megfelelő helyi tanúsítványt (előfordulhat, hogy testre kell szabnia, hogy megtalálja a használni kívánt tanúsítványt):
# 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
}
}
}
Az ujjlenyomata alapján azonosított tanúsítvány esetében a konfigurációs szkript frissíthető a következő érték használatára:
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
}
}
}
A konfiguráció futtatása
Ezen a ponton futtathatja a konfigurációt, amely két fájlt ad ki:
- Egy
*.meta.mof
fájl, amely úgy konfigurálja a Helyi Configuration Manager, hogy visszafejtse a hitelesítő adatokat a helyi gép tárolójában tárolt és az ujjlenyomata alapján azonosított tanúsítvánnyal. A Set-DscLocalConfigurationManager alkalmazza a*.meta.mof
fájlt. - Egy MOF-fájl, amely ténylegesen alkalmazza a konfigurációt. Start-DscConfiguration alkalmazza a konfigurációt.
Ezek a parancsok a következő lépéseket hajtják végre:
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
Ez a példa leküldi a DSC-konfigurációt a célcsomópontra. A DSC-konfiguráció dsc lekéréses kiszolgálóval is alkalmazható, ha van ilyen.
A DSC-konfigurációk DSC lekéréses kiszolgálóval történő alkalmazásával kapcsolatos további információkért lásd: DSC lekéréses ügyfél beállítása .
Példa hitelesítőadat-titkosítási modulra
Íme egy teljes példa, amely tartalmazza az összes lépést, valamint egy segédparancsmagot, amely exportálja és másolja a nyilvános kulcsokat:
# 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