WCF如何使用X509证书
如何创建证书:
makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=JiangServer -sky exchange -pe (服务端证书)
makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=JiangClient -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。
证书创建成功后!—

<?xml version="1.0" encoding="utf-8"?>
<configuration> <system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="WcfService.Service1" behaviorConfiguration="CustomBehavior"> <endpoint
binding="mexHttpBinding"
contract="IMetadataExchange"
address="mex" />
<endpoint address="" binding="wsHttpBinding" contract="WcfService.IService1" bindingConfiguration="CustomBinding"/> </service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CustomBehavior">
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
<serviceMetadata httpGetEnabled="true"/>
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="false"/> <serviceCredentials>
<!-- 服务端采用证书详细配置 findValue :创建证书名称 storeName:证书储存详细位于哪 storeLocation :证书储存位于当前本机用户 X509FindType : x509查找证书主题名-->
<serviceCertificate findValue="JiangServer" storeName="My" storeLocation="LocalMachine" x509FindType="FindBySubjectName"/>
<!--客户端验证方式-->
<clientCertificate>
<authentication certificateValidationMode="None"/>
</clientCertificate>
</serviceCredentials> </behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> <bindings>
<wsHttpBinding>
<binding name="CustomBinding">
<!--验证方式-->
<security mode="Message">
<message clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings> </system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer> </configuration>
这样就基本简单的x509验证方式已经配置好了,发布到IIS中。运行如下:
-----------------------------------------------------------------------------------------------------------运行后报错---------------------------
“/”应用程序中的服务器错误。
-------------------------------------------------------------------------------- 密钥集不存在。 说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Security.Cryptography.CryptographicException: 密钥集不存在。 源错误: 执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 堆栈跟踪: [CryptographicException: 密钥集不存在。
]
System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer) +450
System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle) +158
System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair() +231
System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() +537
System.ServiceModel.Security.SecurityUtils.EnsureCertificateCanDoKeyExchange(X509Certificate2 certificate) +78 [ArgumentException: 可能证书“CN=GAServer1”没有能够进行密钥交换的私钥,或者进程可能没有访问私钥的权限。有关详细信息,请参见内部异常。]

分析错误提示,应该是没有权限呀,我们打开”MMC” 打到我的们 My --证书中的 JiangServer 设置权限。

添加Everyone --读取

再次运行wcf,成功了!

现在服务端已经 Deployment!再创建客户端,引用wcf服务。引用wcf服务成功后,我要再次要Deployment “App.config”文件,添加验证信息。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="abc" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="" maxReceivedMessageSize=""
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="" maxStringContentLength="" maxArrayLength=""
maxBytesPerRead="" maxNameTableCharCount="" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<message clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://192.168.1.3/Service1.svc" binding="wsHttpBinding"
bindingConfiguration="abc" contract="ServiceReference1.IService1"
name="WSHttpBinding_IService1" behaviorConfiguration="CustomBehavior">
<identity>
<!--成功引用后,自动生成的码-->
<certificate encodedValue="AwAAAAEAAAAUAAAAIAUN/+3YklX/nz/t50hALxjci4IgAAAAAQAAALcBAAAwggGzMIIBYaADAgECAhBEsG++ZOulskOwScx8Gti4MAkGBSsOAwIdBQAwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3kwHhcNMTExMjMwMDI1MjE1WhcNMzkxMjMxMjM1OTU5WjAWMRQwEgYDVQQDEwtKaWFuZ1NlcnZlcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA8HGfOESdAJA6CfUCKxsjVx+G50jzbCykCQT2UzYLhmTZn0/jRt3AhwcJn4wO7tU5xNhZUXhLc/Vxk8apJT6Y7fSv9A02mbX5GShVTuRCpJJZN89VmEKAoWfV1n7iMsbUFBzAQm71+9K3KMAWs77ymYbBb6aVXyxfyYfuPrC/3xsCAwEAAaNLMEkwRwYDVR0BBEAwPoAQEuQJLQYdHU8AjWEh3BZkY6EYMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5ghAGN2wAqgBkihHPuNSqXDX0MAkGBSsOAwIdBQADQQBVVrkT8SCHXE3KaXWMX8x5PplYazhf+ibhjkg8P3CjldB9h12BmNKtbo1on7GxrNJb0drOxYB2vqjbolQ82NZT" />
</identity>
</endpoint>
</client>
<!--添加以下配置-->
<behaviors>
<endpointBehaviors>
<behavior name="CustomBehavior">
<clientCredentials>
<!--客户端证书-->
<clientCertificate findValue="JiangClient" storeName="My" storeLocation="LocalMachine" x509FindType="FindBySubjectName"/>
<serviceCertificate>
<authentication certificateValidationMode="None"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
启动客户端,调用成功!

注意:如果调用wcf失败,几个错误信息
1> : 无法使用以下搜索标准找到 X.509 证书: StoreName“My”、StoreLocation“LocalMachine”、FindType“FindBySubjectName”、FindValue“JiangClient1”。

解决办法:导入证书(JiangClient1)或创建此证书,注意报的错误信息中的证书所储存位置
2 > : 未提供客户端证书。请在 ClientCredential 中指定一个客户端证书。

解决办法: 因为服务端使用了证书验证,所以要在客户端配置证书。

再次调用成功!以上就是我在设置X509证书时出现在问题。
再次用HttpAnalyzerStdV5查看是否已经加密。如下,已经加密了

WCF如何使用X509证书的更多相关文章
- WCF如何使用X509证书 z
WCF如何使用X509证书 如何创建证书: makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=JiangServer -sky exchange - ...
- XP机器上WCF采用X509证书加密时IIS读取证书的授权
XP机器上WCF采用X509证书加密时IIS读取证书的授权 XP下的授权命令为:winhttpcertcfg -g -c LOCAL_MACHINE\My -s 证书名称 -a "ASPNE ...
- 【WCF安全】使用X509证书自定义验证
接触WCF时间比较短,在项目中要使用X509证书,纠结好几天终于有了结论,因此为了方便日后查阅和园友交流特意单独将部分代码提出,并做以记录. 1.准备工作 制作X509证书,此处用到三个证书名称 导入 ...
- 【WCF安全】WCF 自定义授权[用户名+密码+x509证书]
1.x509证书制作(略) 2.直接贴代码 ----------------------------------------------------------------------服务端----- ...
- WCF 安全性 之 自定义证书验证
案例下载 http://download.csdn.net/detail/woxpp/4113172 客户端调用代码 通过代理类 代理生成 参见 http://www.cnblogs.com/woxp ...
- X509 证书生成
X509证书介绍X.509 是由国际电信联盟(ITU-T)制定的数字证书标准,相信这是人尽皆知的了,目前X.509证书据我所知有三个版本,.net中使用的是x.509-2,X.509-2 版引入了主体 ...
- X509证书认证流程介绍
X509证书介绍X.509 是由国际电信联盟(ITU-T)制定的数字证书标准,相信这是人尽皆知的了,目前X.509证书据我所知有三个版本,.net中使用的是x.509-2,X.509-2 版引入了主体 ...
- WCF数据传输安全--数字证书
WCF 的传输安全涉及认证(客户端与服务器端双向认证).消息一致性(签名)和机密性(加密)三个主题. 常用认证方式: 第一:用户名/密码认证:wcf提供三种认证模式:1.将用户名映射到windows账 ...
- OpenSSL 使用拾遗(二)---- X509 证书的 SKID/AKID 字段
SKID(证书使用者密钥标识符,subject key identifier 的简称)和 AKID(证书颁发机构密钥标识符,authority key identifier 的简称)是 X509 证书 ...
随机推荐
- 洛谷 P3157 [CQOI2011]动态逆序对(树套树)
题面 luogu 题解 树套树(树状数组套动态开点线段树) 静态使用树状数组求逆序对就不多说了 用线段树代替树状数组,外面套树状数组统计每个点逆序对数量 设 \(t1[i]\)为\(i\)前面有多少个 ...
- luogu4931. 情侣?给我烧了!(加强版)(错位排列)
题目链接 https://www.luogu.org/problemnew/show/P4931 题解 以下部分是我最开始的想法. 对于每一个 \(k\),满足恰好有 \(k\) 对情侣和睦的方案数为 ...
- python-%操作符
1.打印字符串 print("His name is %s"%("Aviad")) His name is Aviad 2.打印整数print("He ...
- codeforces 1068d Array Without Local Maximums dp
题目传送门 题目大意:给出一个长度为n的数组,这个数组有的数是给出的,有的数是固定的,且范围都在[1,200]之间,要求这个数组中,每一个数字都小于等于 前后两个数字的最大值,求方案数mod p. 思 ...
- jar 启动关闭
1.后台启动 startTest.sh #设置工程路径project_path=/root/testcd $project_path#nohup后台启动,输出日志到test.lognohup java ...
- PIE SDK导出图片
1. 功能简介 导出图片功能可以将制图模板以及视图.绘制元素.制图元素等保存为图片.本示例程序实现了专题制图下导出图片功能. 2. 功能实现说明 2.1导出图片 2.2 实现思路及原理说明 调用IPa ...
- Win10磁盘利用率高达100%设置修改方法
Win10磁盘利用率高达100%设置修改方法 Windows Defender关闭 Win10的Windows Defender已经变身成为安全中心,它的运行机制改成了即便是电脑中存在多个杀毒.防护软 ...
- oracle 备份恢复篇(三)---rman spfile的丢失
一,环境准备 1, 拥有全备 数据 2, 查看spfile文件位置 SQL> SQL> SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER ...
- 60分钟内从零起步驾驭Hive实战学习笔记(Ubuntu里安装mysql)
本博文的主要内容是: 1. Hive本质解析 2. Hive安装实战 3. 使用Hive操作搜索引擎数据实战 SparkSQL前身是Shark,Shark强烈依赖于Hive.Spark原来没有做SQL ...
- 九度oj题目1153:括号匹配问题
题目1153:括号匹配问题 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4866 解决:2112 题目描述: 在某个字符串(长度不超过100)中有左括号.右括号和大小写字母:规定(与常见 ...