摘要:Digital Certificate是计算机安全里很常见的内容。在网络上,最常见的情况大概就是SSL安全连接中的使用了。关于Digital Certificate,RSA算法,DSA算法,Message Digest,Mutual SSL等内容我就不介绍了,需要用到的朋友应该都很熟悉。如果不是很熟悉但有兴趣了解一些,这里有一个很浅显的教程: http://www.youdzone.com/signature.html 这里简单介绍一点我自己遇到过的一些小例子。 我们的项目里需要用到一些Certificate(抱歉,我想还是不翻译成“证书”了,下同),有各种不同的用处,比如有用来做mutual SSL的,有用来做数字签名(digital signature)的。Windows提供了一个管理你系统里所有Certificate的工具,你可以这样调用: 1. Start -> Run -> "mmc" 2. 然后在出来的工具界面中-> File -> Add/Remove Snap-in -> Add -> Certificates -> 选Computer Account 这样就可以看到所有安装在LocalMachine这个Certificate Store里的Certificates了。如果在最后一步选My user account,则是看到CurrentUser这个Certificate Store。 开始的时候我们的Certificate全是通过这个工具来手工管理的,但后来Certificate越来越多,且每个Certificate的权限设置都有不同的时候,我们发现手工管理很容易出错,而且在最后布置(deploy)Web Application的时候很不方便(需要手动地往服务器上一个个加Certificate),所以我就写了一个工具来自动化整个过程。 .NET 2.0中对Ceritificate以及Certificate Store的使用和管理提供了很多的类,请参看System.Security.Cryptography.X509Certificates这个命名空间。两个最常用的类是: X509Store (代表Certificate Store)和X509Certificate2 (代表X509标准的Certificates) 每个Certificate Store都有一串sub store,比如Personal是存放一些你个人的Certificate的地方(你如果给你的IIS服务器用selfssl加了一个服务器Certificate,那个Certificate就存放在Personal sub store里),还有比如Trusted Root Certification Authorities是存放所有你信任的Root Certificate的地方。 现在假设我们有一个很简单的任务,就是要在LocalMachine Certificate Store里建立一个MyProjectCerts的sub store,然后把我们项目用到的Certificate全放在那里,这个在.NET很容易做(如果是用传统的Win32 CAPI的话,光看看那些有5,6个参数的API就够你头疼的了): X509Store store = new X509Store(args[1], StoreLocation.LocationMachine);
store.Open(OpenFlags.ReadWrite);
X509Certificate2 certificate = new X509Certificate2(PATH_TO_CERTIFICATE);
store.Add(certificate);
store.Close();
如果你的certificate带有一个Private Key(关于Certificate及其携带的Public Key/Private Key的内容我也略过了)的pfx文件,那么它一定是有密码保护的,不过这也很容易,只要在构造函数里多加一个参数就可以了:
X509Certificate2 certificate = new X509Certificate2(PATH_TO_CERTIFICATE,......[
阅读全文]