数字证书及在WCF中的应用
一 概念
1、内容
证书的发布机构
证书的有效期
证书所有者(Subject)
签名所使用的算法
指纹以及指纹算法
公钥
私钥
2、存储区
3、有效性
二 作用
1、增强传输的安全性与消息的完整性
防止消息被查看与篡改
2、保证发信的不可抵赖性
三 创建、查看、导入、导出
1、运行命令“makecert -r -pe -n "CN=MyServer" -ss My -sky exchange”,创建并存储证书
2、运行“mmc”命令,弹出“Microsoft管理控制台”窗体。在此进行证书的查看、导入、导出等工作。
四 在WCF中使用X.509证书
WCF服务端
1、需要一个包含私钥的数字证书
makecert -r -pe -n "CN=MyServer" -ss My -sky exchange
2、Binding的Security模式设置为“Certificate”
代码方式
public class CustomX509CertificateValidator : X509CertificateValidator
{public override void Validate(X509Certificate2 certificate){}
}var binding = new NetTcpBinding
{Security ={Mode = SecurityMode.Message,Message = { ClientCredentialType = MessageCredentialType.Certificate },},
};
host.AddServiceEndpoint(contract, binding, contract.Name);var serviceBehaviors = new List<IServiceBehavior>();
var serviceCredentials = new ServiceCredentials();
//设置数字证书
serviceCredentials.ServiceCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "MyServer");
//设置数字证书的有效性验证模式
serviceCredentials.ClientCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.Custom;
serviceCredentials.ClientCertificate.Authentication.CustomCertificateValidator = new CustomX509CertificateValidator();
serviceBehaviors.Add(serviceCredentials);
foreach (var serviceBehavior in _serviceBehaviors)
{if (host.Description.Behaviors.Contains(serviceBehavior.GetType()))host.Description.Behaviors.Remove(serviceBehavior);host.Description.Behaviors.Add(serviceBehavior);
}
WCF客户端
1、需要一个包含私钥的数字证书
makecert -r -pe -n "CN=MyClient" -ss My -sky exchange
2、Binding的Security模式设置为“Certificate”
代码方式
static ChannelFactory<T> GetFactory<T>(object callbackObject)where T : IServiceContract
{//获取数字证书var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);store.Open(OpenFlags.ReadOnly);var certs = store.Certificates.Find(X509FindType.FindBySubjectName, "MyClient", false);if (certs.Count == 0)throw new SecurityException("客户端未安装数字证书");var cert = certs[0];var binding = new NetTcpBinding(Properties.Settings.Default.BindingConfigurationName);var address = new EndpointAddress(new Uri(string.Format("{0}/{1}", Properties.Settings.Default.EndpointAddress, typeof(T).Name))//, EndpointIdentity.CreateDnsIdentity("MyServer"));var factory = (callbackObject == null)? new ChannelFactory<T>(binding, address): new DuplexChannelFactory<T>(callbackObject, binding, address);var cc=factory.Endpoint.Behaviors.Find<ClientCredentials>();cc.ClientCertificate.Certificate = cert;cc.ServiceCertificate.Authentication.CertificateValidationMode=X509CertificateValidationMode.None;return factory;
}
配置方式
<bindings><netTcpBinding><binding name="NetTcpBinding"><security mode="Message"><message clientCredentialType="Certificate" algorithmSuite="Default" /></security></binding></netTcpBinding>
</bindings>
五 参考
X.509 & RSA
WCF应用X509证书
序、消息安全模式之UserName客户端身份验证
转载于:https://www.cnblogs.com/beta2013/archive/2012/05/07/3377308.html
数字证书及在WCF中的应用相关推荐
- 数字证书在web应用中实现登陆
1数字证书登录认证的优点 作为企业信息系统的第一道大门,身份认证是确保企业信息资源只能被合法用户所访问的重要保障. 传统的口令认证方式虽然简单,但是由于其易受到窃听.重放等攻击的安全缺陷,使其已无法满 ...
- 数字证书在WEB应用中登录
1数字证书登录认证的优点 作为企业信息系统的第一道大门,身份认证是确保企业信息资源只能被合法用户所访问的重要保障. 传统的口令认证方式虽然简单,但是由于其易受到窃听.重放等攻击的安全缺陷,使其已无法满 ...
- 数字证书应用综合揭秘(包括证书生成、加密、解密、签名、验签)
引言 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件.为现实网络安全化标准如今大部分的 B2B.B2C.P2P.O2O 等商业网站含有重要企业资料个人资料的信息资信网站 ...
- 一文读懂Https的安全性原理、数字证书、单项认证、双项认证等
为什么80%的码农都做不了架构师?>>> 本文引用了作者Smily(博客:blog.csdn.net/qq_20521573)的文章内容,感谢无私分享. 1.前言 目前苹果公司 ...
- android 数字证书具体应用机制
Android手机操作系统作为一款比较流行的开源系统在手机领域占据着举足轻重的地位. 在Android系统中,所有安装到系统的应用程序都必有一个Android数字证书,此数字证书用于标识应用程序的作者 ...
- 网络安全技术——数字证书技术原理
点击上方"蓝字"关注我们吧 在上节<网络安全技术--加密技术.数字签名技术>中研究了数据通信中的加密和签名技术,在非对称加密体系中,A用户拿到B用户的公钥后便可以用这个 ...
- 数字证书原理简单说明
什么是数字证书 数字证书在网络上类似于人在社会上持有的身份证等证件,用来在网络上证明数字证书持有者的身份.数字证书持有者可能是现实社会中的自然人.法人,也可能是网络设备.数字证书可以简单理解为&quo ...
- 数字证书原理分析总结
什么是数字证书 数字证书在网络上类似于人在社会上持有的身份证等证件,用来在网络上证明数字证书持有者的身份.数字证书持有者可能是现实社会中的自然人.法人,也可能是网络设备.数字证书可以简单理解为&quo ...
- 关于数字证书理解的简单整理以及12306站点证书简单分析
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sundacheng1989/article/details/25540601 首先简单理解一下什么是 ...
最新文章
- select框高度问题
- Hrefer教程【超越官方】
- android x86 vulkan,【图片】预告贴,准备同步AndroidIA源码,貌似支持Vulkan【androidx86吧】_百度贴吧...
- python打包和添加数据文件_python使用grpc,并打包成python模块
- 金融情报挖掘:面向公开文本的期货事件聚合与传导因素分析
- C语言fread函数了解
- hdu2066一个人的旅行(多源点多汇点的最短路径问题)
- html5 移动端 Android和iOS手机 video自动播放
- 新版Windows Live SkyDrive Beta发布
- android api 中文 (74)—— AdapterView.AdapterContextMenuInfo
- PV EV AC BAC EAC ETC等计算公式
- 测试驱动开发之初窥门径
- MATLAB 超定方程组 最小二乘法
- 2023四川大学计算机考研信息汇总
- python删除表格重复行_python 删除excel表格重复行,数据预处理操作
- 英语谚语大全(3267条)
- 大于2TB的卷的知识.主要关于windows, EFI,GPT
- ERP、MES、APS在生产排程上的区别?
- 基于OCILIB的oracle数据库操作总结及自动生成Model和Dao的工具
- Via浏览器怎么查看网页源码
热门文章
- Java JVM内存模型
- 021_html文本格式化标签
- java 等待_Java并发之等待/通知机制
- f12获取网页文本_怎么获取网页源代码中的文件?
- android编译会生成class吗,请教下Android N混合编译生成的base.art中的类在运行时最终添加到哪个classloader的问题...
- 记住linux terminal下的快捷键,提高操作效率!
- Windows 命令窗口(cmd)命令不能用解决办法
- Keil uVision5中配置stm32标准固件库v3.5
- 硬盘显示容量和实际容量不符合_SSD小讲堂丨实力科普固态硬盘实际容量为何比标称小...
- c语言stoi函数源码,一系列相关函数的通用函数(例如std::stoi,std::stof,std::stod等)...