关注
Hi,
看了你的问题,又涉及到证书了,这个几乎会让人崩溃的问题,呵呵。因为我最近也在准备WCF安全的代码,包括和其他人也讨论了安全相关的一些概念。所以来参与讨论,希望能给你提供一些帮助意见。
既然需要使用证书,这里很都概念都应该一样了,比如非对称加密、签名等等。你的这个问题,恰恰在WCF安全编程里属于一个case,就是使用证书对客户端进行验证,要求的绑定协议是https相关的。WCF在http数据交换的层次上和Web Service 还有ASpx很相似,或者说几乎一样。对于https相关的安全模型,也是由后者继承而来。所以你的问题,我就结合者一起回答。其他WCF爱好者也有个参考。
1.为客户端办法证书:这个涉及到证书的制作(网上资料很多),然后你要导入到客户端IE证书存储区。(1)制作证书:
Microsoft Visual Studio 2008-->Visual Studio Tools-->Visual Studio 2008 命令提示行里输入:
makecert -r -pe -n "CN=FrankWCFServer" -ss My -sky exchange。
(WCF分布式开发常见错误(21):unable to open its IChannelListener.分发器未能打开侦听器 )这里整理了证书的制作,和IE查看的资料。可以参考。
2.验证客户端证书:WCF里也有验证客户端证书的问题,绑定协议必须支持消息安全加密,例如SSL,WSHTTPBinding协议。解析的时候使用的类就是:using System.Security.Cryptography.X509Certificates;简单的验证代码就是:
public class CustomX509CertificateValidator : X509CertificateValidator
{
public override void Validate(X509Certificate2 certificate)
{
Console.WriteLine(certificate.Subject);
Console.WriteLine(certificate.Thumbprint);
if (certificate.Thumbprint != "12321212312319B1DD2390D8C9488747BF")
throw new SecurityTokenException("Certificate Validation Error!");
}
}
Thumbprint是指纹的意思,证书的唯一标识,每个证书都有一个,而且不会重复。你这里也会使用此类来验证。
一下推荐几个不错的资料,如果你安全的概念很清楚了,就只看前2个吧,最后一个是证书相关的安全概念,需要的话可以看看。
http://topic.csdn.net/t/20040723/17/3204390.html(几乎和你的情况一样,包括如何开发)
http://topic.csdn.net/u/20090521/21/b921912a-88c5-462d-8ef2-b0d3fba35c45.html(asp.net获取客户端证书)
http://www.cqpc110.cn/Files/Faq180.htm(一个网银证书的问题,其实可以参考一下IE证书设置)
WSE3.0构建Web服务安全(2):非对称加密、公钥、密钥、证书、签名的区别和联系以及X.509 证书的获得和管理,记录了详细的证书制作过程。