解决WCF部署到IIS出现“证书必须具有能够进行密钥交换的私钥,该进程必须具有访问私钥的权限”

访问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 

 

posted @ 2014-11-03 20:24  沙耶  阅读(3065)  评论(0编辑  收藏  举报