2014-11-16 68 views
2

我正嘗試使用powershell DSC做一些事情。我想有每個指令加密傳遞的憑據在http://technet.microsoft.com/en-us/library/dn781430.aspx這一切似乎直到我的目標節點上運行啓動DscConfiguration做工精細,我得到的錯誤:未獲取所需的狀態配置憑證私鑰

The private key could not be acquired. + CategoryInfo : NotSpecified: (root/Microsoft/...gurationManager:String) [], CimException + FullyQualifiedErrorId : MI RESULT 1 + PSComputerName : DmitriyDev

再回到我檢查地看到,財政部包含憑據加密和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 
        } 
       } 
} 

當我使用此代碼測試我的證書(上焦油get節點)我看到證書的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只能將其視爲空。

在目標節點上,我甚至手動導出公鑰並重新導入它們,沒有像其他dsc教程中概述的那樣運氣。

我也嘗試使用procmon來查看目標節點上的問題。我看到wmiprvse進程,並看到它作爲系統運行(如預期),我檢查,以確保私鑰允許系統(所有在目標節點上)權限

所以我的問題是怎麼做我得到我的私鑰被DSC使用,特別是目標節點上的LCM?或者我如何更多地診斷問題?

+0

證書是否在您的賬戶或系統賬戶上持有?也許嘗試在當前用戶的憑據下運行此查找('[System.Net.CredentialCache] :: DefaultCredentials');即它看起來在該賬戶的證書庫內。不知道,因爲我還沒有玩過證書... – JohnLBevan

+0

它是一個機器證書,因爲DSC本地配置管理器在系統帳戶AFAIK下運行(因此需要通過任何網絡活動的憑據) – Karl

+0

請說明你是哪臺計算機指的是你的問題的每一部分。應該有2臺計算機參與:節點(配置將應用於的計算機)和生成MOF(我們稱之爲生成器)的節點。生成器不需要安裝證書。在生成過程中它只需要文件系統上的公鑰部分。然而,*節點*必須使用私鑰安裝證書。看看[這](http://serverfault.com/questions/632390/protecting-credentials-in-desired-state-configuration-using-certificates)有幫助。 – briantist

回答

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腳本,用於創建自簽名證書,並默認使用不同的存儲提供程序,這爲我解決了問題。

+0

在我的情況下,Get-PfxData cmdlet顯然會導致Microsoft軟件KSP(CNG)被用來代替Microsoft Strong Cryptographic Provider(CryptoAPI),就像在原始證書中一樣。 (我使用了Get-PfxData | Export-PfxCertificate更改pfx文件上的密碼。) –

+0

你是對的,它似乎對CNG和.net有問題,如下所述:http://www.hyper- v.nu/archives/bgelens/2015/02/integrating-vm-role-with-desired-state-configuration-part-7-creating-a-configuration-document-with-encrypted-content/ 使用計算機作爲模板因爲它默認爲傳統供應商。 – Karl

0

好吧,我不太確定爲什麼這個工作,但它確實。使用電腦模板似乎工作。在工作方面,目標節點上的PowerShell可以看到它的私有密鑰從

dir cert:\LocalMachine\My | ? PrivateKey -ne $null

一旦這種情況發生這一切按預期工作。所以長話短說就是不要使用工作站Auth模板,而是使用Computer模板。