【问题标题】:Desired State Configuration credential private key not acquired未获取所需状态配置凭据私钥
【发布时间】:2015-01-13 06:24:01
【问题描述】:

我正在尝试将 powershell DSC 用于一些事情。我想按照http://technet.microsoft.com/en-us/library/dn781430.aspx 处的说明对传递的凭据进行加密,这一切似乎都可以正常工作,直到我在目标节点上运行 start-DscConfiguration 并收到错误消息:

无法获取私钥。 + CategoryInfo : NotSpecified: (root/Microsoft/...gurationManager:String) [], CimException + 完全限定错误 ID:MI 结果 1 + PSComputerName : DmitriyDev

回过头来,我检查了 mof 包含加密的凭据,而 meta.mof 包含匹配的指纹等。

回到原始文章我看到了示例代码:

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

当我使用此代码(在目标节点上)测试我的证书时,我看到证书的 PrivateKey 为空。我不确定证书如何为空。用 certutil 和http://blogs.technet.com/b/vishalagarwal/archive/2010/03/30/verifying-the-private-key-property-for-a-certificate-in-the-store.aspx 提到的技术尝试了一些东西,似乎我确实有一个私钥,但是 Powershell 只将其视为 null。

在目标节点上,我什至手动导出了公共私钥并重新导入它们,没有另一个 dsc 教程中所述的运气。

我还尝试使用 procmon 查看目标节点上的问题。我看到 wmiprvse 进程并看到它作为系统运行(如预期的那样),我检查以确保系统允许私钥上的权限(全部在目标节点上)

所以我的问题是如何让 DSC 使用我的私钥,特别是目标节点上的 LCM?或者如何进一步诊断问题?

【问题讨论】:

  • 证书是在您的帐户上还是在system 帐户上?也许尝试在当前用户的凭据下运行此查找 ([System.Net.CredentialCache]::DefaultCredentials);即它在该帐户的证书存储中查找。不确定,因为我没有玩过证书......
  • 这是一个机器证书,因为 DSC 本地配置管理器在系统帐户 AFAIK 下运行(因此需要为任何网络活动传递凭据)
  • 请在问题的每个部分中说明您指的是哪台计算机。应该涉及两台计算机:节点(将应用配置的计算机),以及生成 MOF 的一台(我们称其为生成器)。生成器不需要安装证书。它只需要生成期间文件系统上可用的公钥部分。但是,节点 必须使用私钥安装证书。看看this 是否有帮助。
  • Briantist,实际上我之前已经阅读了您的链接到文章,并且总的来说我遵循相同的模式。我基于工作站身份验证模板创建了一个模板,并将其用于目标节点。这一切似乎都奏效了,但 powershell 似乎没有在目标节点上看到私钥。我在link看到了类似的东西。
  • 有趣;我想我正在使用计算机模板进行自动注册(或者至少是从中克隆的模板)。很高兴你解决了!

标签: powershell certificate public-key dsc


【解决方案1】:

我在使用 New-SelfSignedCertificate 创建我的证书时遇到了类似的错误。对于任何有类似问题的人,我怀疑问题与 New-SelfSignedCertificate 使用的存储提供程序有关(请参阅http://blogs.technet.com/b/vishalagarwal/archive/2010/03/30/verifying-the-private-key-property-for-a-certificate-in-the-store.aspx,它谈到了 Microsoft 软件密钥存储提供程序和 .NET 类的问题)。 technet 上有一个 powershell 脚本可以创建自签名证书,并且默认使用不同的存储提供程序,这为我解决了这个问题。

【讨论】:

  • 在我的例子中,显然是 Get-PfxData cmdlet 导致使用 M​​icrosoft 软件 KSP (CNG) 而不是 Microsoft 强加密提供程序 (CryptoAPI),就像在原始证书中一样。 (我使用 Get-PfxData | Export-PfxCertificate 来更改 pfx 文件的密码。)
  • 你是对的,这似乎是 CNG 和 .net 的问题,如下所述:hyper-v.nu/archives/bgelens/2015/02/… 使用计算机作为模板,因为它默认为旧提供程序。
【解决方案2】:

好的,我不确定为什么这确实有效,但确实有效。使用计算机模板似乎工作。在工作方面,目标节点上的powershell可以从

看到它的私钥

目录证书:\LocalMachine\My | ? PrivateKey -ne $null

一旦发生,一切都会按预期进行。长话短说,不要使用工作站身份验证模板,而是使用计算机模板。

【讨论】:

    猜你喜欢
    • 2017-08-22
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    相关资源
    最近更新 更多