zoukankan      html  css  js  c++  java
  • WCF:System.Security.Cryptography.CryptographicException: 密钥集不存在

    WCF使用IIS部署时,使用x509证书验证,在创建证书并正确配置程序后,访问出现错误提示:

    System.Security.Cryptography.CryptographicException: 密钥集不存在。ArgumentException: 证书“CN=XXXX”必须具有能够进行密钥交换的私钥。该进程必须具有访问私钥的权限。这个问题是因为 WCF 所使用的帐户(NETWORK SERVICE/ASPNET)对证书私钥文件的读访问权限造成的。

    造成上面的错误主要是Network Service(Server)用户没有访问证书权限。

    证明说明:

    1. 证书的私钥文件在计算机上的存储位置?
       Windows xp存放在:C:Documents and SettingsAll UsersApplication DataMicrosoftCryptoRSAMachineKeys
       Windows vista存放在:C:ProgramDataMicrosoftCryptoRSAMachineKeys

    2. 哪个文件才是我们要找的证书的私钥文件?
       CryptoRSAMachineKeys 这个文件里可能有很多文件,有几种方法可以确定。
       1)根据文件的修改日期
       2)如果根据文件的修改日期,不能确定是哪个文件,可以使用FindPrivateKey这个工具来获取证书的完整路径。(没用过,网上抄的)

    3. WCF 运行时所使用的是哪个帐户?

    方案

    进程标识

    客户端(控制台或 WinForms 应用程序)。

    当前登录的用户。

    自承载服务。

    当前登录的用户。

    在 IIS 6.0 (Windows Server 2003) 或 IIS 7.0 (Windows Vista) 中承载的服务。

    NETWORK SERVICE

    解决方法:

    1.手动设置证书的访问权限,增加“NETWORK SERVICE”用户访问权限。修改IIS7应用程序池中对应站点--高级设置--进程模型--标识为“NETWORK SERVICE”。

    2.使用WinHttpCertCfg.exe或CertMgr.exe实现证书授权,但这两个程序需要自己下载。下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=19801

  • 相关阅读:
    tableView操作数据持久化
    9.0banb以前和9.0以后版本后JSON解析
    数据持久化存储回顾
    解决Xcode会出现的问题
    iview-cli 项目、iView admin 代理与跨域问题解决方案
    将变量做为一个对象的key,push新增进一个数组
    页面加载速度优化的建议
    vue中渲染页面,动态设置颜色
    e.currentTarget与e.target
    iview中tree的事件运用
  • 原文地址:https://www.cnblogs.com/tjy9999/p/4838329.html
Copyright © 2011-2022 走看看