给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 打开控制台

在控制台菜单->文件->添加删除管理但单元 选择添加证书

 

 

 

image

 

然后就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>

posted @ 2016-06-02 22:47  hello_stone  阅读(75)  评论(0)    收藏  举报