【发布时间】: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