给wcf message模式添加证书
wcf安全模式为message,或transport的时候要添加证书,
证书添加好后,运行wcf老是报错:
可能证书“CN=MyCA”没有能够进行密钥交换的私钥,或者进程可能没有访问私钥的权限。有关详细信息,请参见内部异常。
到底是证书没有密钥,还是当前运行的账号没有访问该证书的权限,也不知道。
用findprivatekey找到证书的路径,给这个证书文件 属性->安全 设置权限 也没用。
用winhttpcertcfg设置权限也没用
用makecert重新创建证书 makecert -r -pe -n "cn=MyCA" -$ commercial -a sha1 -b 08/05/2010 -e 01/01/2012 -cy authority -ss my -sr currentuser 还是没用
无限郁闷。
最后终于找到了"V青山绿水"的一篇文章
http://www.cnblogs.com/ruiati/archive/2013/05/07/3064831.html
问题才得以解决
成功步骤如下:
1、如何创建证书:
makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=ServerCA -sky exchange -pe (服务端证书)
makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=ClientCA -sky exchange -pe (客户端证书)
各种参数的介绍
属性解析
-sr
指定的证书存储区中的注册表位置。
currentUser
指定注册版存储位置为 HKEY_CURRENT_USER.
localMachine
指定注册版存储位置为 HKEY_LOCAL_MACHINE.
-ss
指定证书存储的位置。
-a
指定相关的算法,可以选择 MD5 算法或者 SHA1算法
-n
指定证书的名称。该名称遵循X.500命名标准。简单例子如 "CN=MyName" 格式,如果没有指定/n开关,证书默认的名称是"Joe's Software Emporium"。
-sky
证书键类型。可以设置为 exchange 或者 signature。
-pe
证书可导出
详细说明:见msdn。
2、 证书创建成功后!—
win+r 输入MMC 打开控制台
在控制台菜单->文件->添加删除管理但单元 选择添加证书




然后就wcf的配置了。
<system.serviceModel>
<services>
<service name="MyNamespace.MyService" behaviorConfiguration="CertificatesSecurity">
<endpoint address="http://localhost:8001/MyService" binding="wsHttpBinding" bindingConfiguration="WSAnonymous" contract="MyNamespace.IMyContract"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CertificatesSecurity">
<serviceCredentials>
<serviceCertificate findValue="ServerCA" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/>
</serviceCredentials>
<serviceAuthorization principalPermissionMode="None"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="WSAnonymous">
<security mode="Message">
<message clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>

浙公网安备 33010602011771号