訪問WCF服務時,出現異常詳細信息: System.Security.Cryptography.CryptographicException: 密鑰集不存在。ArgumentException: 證書“CN=MyServerCert”必須具有能夠進行密鑰交換的私鑰。該進程必須具有訪問私鑰的權限。這個問題是因為 WCF 所使用的帳戶(NETWORK SERVICE/ASPNET)對證書私鑰文件的讀訪問權限造成的。
造成上面的錯誤主要是Network Service(Server)用戶沒有訪問證書權限,要解決該錯誤, 只需要給相應的賬號分配權限即可,這里IIS訪問證書密鑰的權限可以通過WinHttpCertCfg.exe來處理,只需要通過命令行執行該程序即可,如下所示。
winhttpcertcfg -g -c LOCAL_MACHINE\My -s MyServerCert -a "NETWORK SERVICE"
運行命令后,在運行WCF服務,一切OK了
其它解決辦法可參照:WCF部署:讓IIS有權限訪問證書文件
-------------------------------------------------------------------------------------------------------------------------------
如果設置了訪問權限,還出現上面的錯誤,那么您需要設置一下應用程序池,操作如下:
分別進入Classic .NET AppPool 和 DefaultAppPool 高級設置,將進程模型標識設置為 NetworkService