我收到錯誤「證書CN = tempcert'必須擁有能夠進行密鑰交換的私鑰」,當我訪問私鑰時,該進程必須擁有私鑰的訪問權限使用HTTP在Win7上運行WCF服務。我將應用程序池更改爲使用「NetworkService」。我使用本地計算機安裝了服務器證書。證書顯示在本地計算機/個人/證書下的證書MMC中。我雙擊證書並聲明它有一個私鑰。然後運行FindPrivateKey實用程序,並指出它在C:\ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys文件夾中找到私鑰。我進入MMC中的證書插件並授予NETWORK SERVICE帳戶的完整權限。然後,我轉到Windows資源管理器中的文件夾,並確認NETWORK SERVICE對文件夾和特定密鑰文件具有完整權限。但是,每次我運行WCF服務時,都會出現無法找到私鑰的錯誤。我不知道我還能做什麼。無法獲得WCF服務中私鑰的權限
回答
您在創建證書時需要指定-sky exchange
。
makecert -sk SignedByCA -iv TempCA.pvk -n "CN=localhost" -ic
TempCA.cer SignedByCA.cer -sr LocalMachine -ss My -sky exchange -pe
我也一直在努力。沒有快速修復。 「-sky exchange」可能是導致此錯誤的原因,但是在構建自簽名證書時我設置了「-sky exchange」,但仍然收到此錯誤。還有其他問題可能會導致此問題,包括私鑰訪問權限和證書位置。
如果/當你運行你的WCF主機作爲Windows服務這可以適用:
訪問權限的私鑰 就我而言,如果我手動啓動WCF服務,它繼承了我的(管理員組)用戶帳戶權限和WCF服務在查找證書時沒有問題。但是當我使用Windows服務啓動WCF主機時,它繼承了服務的權限,並且我收到了同樣的錯誤。
在服務管理器窗口中,就我而言,運行我的服務的帳戶顯示爲「本地系統」,這實際上意味着「NT AUthority/System」。所以我需要將該帳戶的訪問權限授予該帳戶的私鑰容器。令人驚訝的是,「每個人」都不夠好。您可以使用MMC爲密鑰包含器分配權限,或使用FindPrivatekey.exe並手動使用文件資源管理器設置權限,就像您將訪問權限設置爲文件夾一樣。
商店位置-another因素 此外,在我的情況,我是下運行沒有獲得「LOCALMACHINE」或「當前用戶」存儲帳戶,因此定位我的證書沒有用的。當我使用MMC將證書導入(或複製)到「服務(服務名稱)」時,該服務纔開始工作。
您可以這樣做:打開MMC,然後從列表中選擇「證書」。您會看到三個選項:我的用戶帳戶(CurrentUser),服務帳戶(您選擇哪個服務)和計算機帳戶(LocalMachine)。只需選擇服務帳戶並選擇您的WCF主機運行的服務。
我在這裏的答案並不意味着是一個完整的「如何」,只是對這個問題掙扎的人有幫助的提示。我爲我的文檔寫的「如何」長達10頁。
MMC>文件>添加/刪除管理單元>證書>添加>計算機帳戶>下一步>完成>確定
然後,找到證書>右鍵點擊>所有任務>管理私鑰
添加使用證書的用戶或服務並授予完全控制權。
大功告成:)重新啓動該服務,它應該工作
我得到這個例外了。檢查內部異常顯示: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)證書。
無論如何,我希望這個信息對於有同樣問題的人有用。
哦,我的修補程序是推出一個使用CSP的新證書。 – gottlieb76 2015-11-25 08:40:06
- 1. 無法獲得權限publish_stream
- 2. 在wcf服務無法獲得wsdl
- 3. 在android中無法獲得ACCESS_FINE_LOCATION權限
- 4. '#1045無法登錄到MySQL服務器'無法獲得root權限
- 5. 服務Fabric羣集節點無法從證書獲取私鑰
- 6. WCF服務訪問權限:無權訪問該命名空間
- 7. Hide.rows腳本無法獲得權限?
- 8. 無法獲得ApiGateway LAMBDA:InvokeFunction權限CloudFormation
- 9. NotificationListenerService無法獲得權限BIND_NOTIFICATION_LISTENER_SERVICE
- 10. 無法獲得Facebook發佈權限 - Android
- 11. 無法獲得所有權限位
- 12. WCF Windows服務權限問題
- 13. WCF服務登錄和操作權限
- 14. 無法獲得angularjs服務
- 15. 無法獲得來自WCF服務的響應
- 16. Jquery無法獲得來自WCF REST服務的響應
- 17. 如何在android中獲得web服務的所有權限?
- 18. 無法設定授權規則在web.config中的WCF服務
- 19. 無法獲取JSON了WCF服務
- 20. WCF - 無法獲取Identity.UserName服務內
- 21. 當CPU爲100%時,WCF服務無法獲得CPU利用率
- 22. 無法獲得AspNetCacheProfile在一個WCF 4.0服務
- 23. 無法獲得併發呼叫WCF Web服務工作
- 24. 無法使用Windows驗證獲得WCF Web服務
- 25. 從密鑰庫獲得私鑰
- 26. 私人WCF Web服務
- 27. WCF WF服務,無法爲具有權限的SSL/TLS建立安全通道
- 28. Azure中的「私有」TCP WCF服務?
- 29. MySQL SSL遠程連接錯誤:無法獲得私鑰
- 30. DSC - 客戶端錯誤 - 私鑰無法獲得
也要注意CSP(Legacy CryptoAPI)和KSP(CNG,CryptoNextGen)之間的區別。一些較舊的應用程序不適合KSP/CNG。 – Nic 2013-06-14 23:22:10