2011-02-02 44 views
3

我收到錯誤「證書CN = tempcert'必須擁有能夠進行密鑰交換的私鑰」,當我訪問私鑰時,該進程必須擁有私鑰的訪問權限使用HTTP在Win7上運行WCF服務。我將應用程序池更改爲使用「NetworkService」。我使用本地計算機安裝了服務器證書。證書顯示在本地計算機/個人/證書下的證書MMC中。我雙擊證書並聲明它有一個私鑰。然後運行FindPrivateKey實用程序,並指出它在C:\ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys文件夾中找到私鑰。我進入MMC中的證書插件並授予NETWORK SERVICE帳戶的完整權限。然後,我轉到Windows資源管理器中的文件夾,並確認NETWORK SERVICE對文件夾和特定密鑰文件具有完整權限。但是,每次我運行WCF服務時,都會出現無法找到私鑰的錯誤。我不知道我還能做什麼。無法獲得WCF服務中私鑰的權限

回答

4

您在創建證書時需要指定-sky exchange

makecert -sk SignedByCA -iv TempCA.pvk -n "CN=localhost" -ic 
    TempCA.cer SignedByCA.cer -sr LocalMachine -ss My -sky exchange -pe 
4

我也一直在努力。沒有快速修復。 「-sky exchange」可能是導致此錯誤的原因,但是在構建自簽名證書時我設置了「-sky exchange」,但仍然收到此錯誤。還有其他問題可能會導致此問題,包括私鑰訪問權限和證書位置。

如果/當你運行你的WCF主機作爲Windows服務這可以適用:

訪問權限的私鑰 就我而言,如果我手動啓動WCF服務,它繼承了我的(管理員組)用戶帳戶權限和WCF服務在查找證書時沒有問題。但是當我使用Windows服務啓動WCF主機時,它繼承了服務的權限,並且我收到了同樣的錯誤。

在服務管理器窗口中,就我而言,運行我的服務的帳戶顯示爲「本地系統」,這實際上意味着「NT AUthority/System」。所以我需要將該帳戶的訪問權限授予該帳戶的私鑰容器。令人驚訝的是,「每個人」都不夠好。您可以使用MMC爲密鑰包含器分配權限,或使用FindPrivatekey.exe並手動使用文件資源管理器設置權限,就像您將訪問權限設置爲文件夾一樣。

商店位置-another因素 此外,在我的情況,我是下運行沒有獲得「LOCALMACHINE」或「當前用戶」存儲帳戶,因此定位我的證書沒有用的。當我使用MMC將證書導入(或複製)到「服務(服務名稱)」時,該服務纔開始工作。

您可以這樣做:打開MMC,然後從列表中選擇「證書」。您會看到三個選項:我的用戶帳戶(CurrentUser),服務帳戶(您選擇哪個服務)和計算機帳戶(LocalMachine)。只需選擇服務帳戶並選擇您的WCF主機運行的服務。

我在這裏的答案並不意味着是一個完整的「如何」,只是對這個問題掙扎的人有幫助的提示。我爲我的文檔寫的「如何」長達10頁。

+0

也要注意CSP(Legacy CryptoAPI)和KSP(CNG,CryptoNextGen)之間的區別。一些較舊的應用程序不適合KSP/CNG。 – Nic 2013-06-14 23:22:10

2

MMC>文件>添加/刪除管理單元>證書>添加>計算機帳戶>下一步>完成>確定

然後,找到證書>右鍵點擊>所有任務>管理私鑰

添加使用證書的用戶或服務並授予完全控制權。

大功告成:)重新啓動該服務,它應該工作

0

我得到這個例外了。檢查內部異常顯示:System.Security.Cryptography.CryptographicException: Invalid provider type specified. 事實證明,我在Windows Server 2008上使用.NET 3.5中的CNG證書,本文(https://msdn.microsoft.com/en-us/library/aa738624(v=vs.100).aspx)突出顯示這是不受支持的。

要查看正在使用的證書類型,可以運行命令Certutil -store my並查找提供程序字段。

  • 如果說Microsoft增強加密提供程序 - 那麼它是一個CSP證書。
  • 它說的是微軟軟件密鑰存儲提供商 - 那麼它就是CNG(KSP)證書。

無論如何,我希望這個信息對於有同樣問題的人有用。

+0

哦,我的修補程序是推出一個使用CSP的新證書。 – gottlieb76 2015-11-25 08:40:06

相關問題