DSC - 客户端错误 - 私钥无法获得

问题描述:

我有一个WMF5下的Windows 2012R2 DSC拉服务器和WMF5.1下的Windows 2008R2客户端。由于需要访问网络资源,凭证是由拉服务器编码到财政部和加密使用驻留在证书的证书:\ LOCALMACHINE \我DSC - 客户端错误 - 私钥无法获得

基于https://msdn.microsoft.com/en-us/powershell/dsc/securemof的关键是使用创建:

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 

我在证书导出这个证书,并将其导入到客户端计算机,也:\ LOCALMACHINE \我使用此命令

certutil -addstore My C:\DSC\DscPublicKey.cer 

两台机器可以找到下面的代码

$Cert = Get-ChildItem -Path cert:\LocalMachine\My | Where-Object { 
    (
     ($_.Issuer -eq $IssuerCN) -and ($_.Subject -eq $IssuerCN) 
    ) 
} 
Write-Host " Thumbprint : " $Cert.Thumbprint 

的证书(与交互式管理员用户运行),我可以在MOF见到拉服务器,加密的凭据。加密似乎按预期工作。

在客户端,MOF处理日志显示MSFT_DSCMetaConfiguration的一个实例,该实例具有用于加密的匹配CertificateID,并且使用函数初始化LCM以提取正确的证书。

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

但是,Get-DSCConfigurationStatus显示故障状态。当我看着日志,我看到错误

Status = "Failure"; 
Error = "The private key could not be acquired."; 

和我所有的流水线级最终从InDesiredState =假切换;InDesiredState = True;(我假设DSC是这样做的,以避免永久尝试做某件事情,但它没有希望实现)。

此时我唯一的想法是,客户端的证书不在SYSTEM用户可以访问的位置 - 但我无法将其识别为原因。

如果Cert:\ LocalMachine \我的不是正确的位置 - 应该在哪里安装证书?

编辑:

证书在PULL服务器和出口并手动导入到目标节点的.CER文件上创建(现在 - 最终在AD进行处理)。我也尝试导出完整的PFX并将其导入到目标节点中,结果相同。

在这一点上,我怀疑的是,证书生成,是自签名的,是不够的目的......在一些假设

+0

上运行,如果你创建目标节点上的证书,您可以更新的问题说上编译配置? 您生成证书的计算机上的客户端计算机上是否存在错误?客户端是指你将运行配置的目标节点吗? – TravisEz13

基地,您在拉服务器上创建的证书,包括公共和私人钥匙。然后只在目标节点上导入公钥(.cer文件)。问题是拉服务器不是需要私钥的机器。目标节点需要私钥。这个过程应该看起来更像这样。

  1. 在配置的目标节点上创建证书,包括公钥和私钥。见Securing the MOF File - Creating the Certificate on the Target Node
  2. 导出公钥
  3. 导入拉服务器
  4. 公开密钥编译拉服务器
  5. 不知何故,配置目标节点

本上运行的配置被认为是一个坏但如果你想拥有一个证书,过程将如下所示:

  1. 在Pull服务器上创建证书r,包括公钥和私钥。见Securing the MOF File - Creating the Certificate on the Target Node
  2. 导出使用Export-PfxCertificate
  3. 安全传输的关键目标节点(这通常是不牢固做,为什么它是一个不好的做法)
  4. 导入配置的目标节点上拉键会考
  5. 拉式服务器
  6. 不知何故,配置目标节点
+0

我们的目标是有一个证书(最终由AD部署到约200台机器)。这就是为什么证书是在Pull服务器上生成的,并被部署到目标节点(尽管根据您的信息不正确)。 –

+0

更新了答案... – TravisEz13

+0

标记为答案,因为客户端正在看到证书 - 我现在正在解密失败,但这是一个不同的错误:) –