J'ai un serveur Windows 2012R2 DSC Pull sous WMF5 et un client Windows 2008R2 sous WMF5.1. En raison de la nécessité d'accéder aux ressources du réseau, les informations d'identification sont codées dans le MOF par le serveur Pull et cryptées à l'aide d'un certificat qui réside dans Cert: \ LocalMachine \ MyDSC - erreur client - La clé privée n'a pas pu être acquise
Basé sur https://msdn.microsoft.com/en-us/powershell/dsc/securemof la clé a été créée à l'aide:
New-SelfsignedCertificateEx `
-Subject "CN=${ENV:ComputerName}.${ENV:UserDnsDomain}" `
-EKU 'Document Encryption' `
-KeyUsage 'KeyEncipherment, DataEncipherment' `
-SAN ${ENV:ComputerName}.${ENV:UserDnsDomain} `
-FriendlyName 'DSC Credential Encryption certificate' `
-Exportable `
-StoreLocation 'LocalMachine' `
-StoreName 'My' `
-KeyLength 2048 `
-ProviderName 'Microsoft Enhanced Cryptographic Provider v1.0' `
-AlgorithmName 'RSA' `
-SignatureAlgorithm 'SHA256' `
-NotBefore $effDate `
-NotAfter $expiryDate
J'ai exporté ce cert, et importé dans l'ordinateur client, aussi dans Cert: \ LocalMachine \ My en utilisant cette commande
certutil -addstore My C:\DSC\DscPublicKey.cer
Les deux machines peuvent trouver le cert avec le code suivant (à exécuter avec un utilisateur admin interactif)
$Cert = Get-ChildItem -Path cert:\LocalMachine\My | Where-Object {
(
($_.Issuer -eq $IssuerCN) -and ($_.Subject -eq $IssuerCN)
)
}
Write-Host " Thumbprint : " $Cert.Thumbprint
et je peux voir dans le MOF sur le serveur Tirer, les informations d'identification cryptées. Le cryptage semble fonctionner comme prévu. Du côté client, le journal de traitement MOF affiche une instance de MSFT_DSCMetaConfiguration avec le CertificateID correspondant utilisé pour le chiffrement et le LCM a été initialisé avec une fonction pour extraire le certificat correct.
function Get-LocalEncryptionCertificateThumbprint
{
(dir Cert:\LocalMachine\my) | %{
# Verify the certificate is for Encryption and valid
If (($_.Issuer -eq $encryCertCN) -and ($_.Subject -eq $encryCertCN) )
{
return $_.Thumbprint
}
}
}
Cependant, le Get-DSCConfigurationStatus affiche un état d'échec. Quand je regarde dans les journaux, je vois l'erreur
Status = "Failure";
Error = "The private key could not be acquired.";
et tous mes étages de pipeline sont finalement passés de InDesiredState = False; étant InDesiredState = True; (Je suppose que DSC fait cela pour éviter une tentative perpétuelle de faire quelque chose qu'il n'a aucun espoir d'atteindre). À ce stade, ma seule pensée est que le CERT du côté client n'est pas dans un emplacement auquel l'utilisateur du SYSTÈME peut accéder - mais je n'ai pas été capable d'identifier cela comme étant la cause.
Si Cert: \ LocalMachine \ Mon n'est pas l'emplacement correct - où le certificat doit-il être installé?
EDIT:
Le certificat est créé sur le serveur PULL et le fichier .CER exporté et importé manuellement dans le noeud cible (pour l'instant - éventuellement à traiter dans AD). J'ai également essayé d'exporter le PFX complet et de l'importer dans le nœud cible, avec le même résultat.
À ce stade, je soupçonne que le cert généré, être auto-signé, est insuffisant pour but ...
Pouvez-vous mettre à jour la question de dire si vous créez le cert sur le noeud cible? L'erreur sur l'ordinateur client sur l'ordinateur sur lequel vous avez généré le certificat? Par client, voulez-vous dire le nœud cible qui exécutera la configuration? – TravisEz13