RSS 2.0 Feed
2007-01 Entries
摘要: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,......[阅读全文]

posted @ | Feedback (4) |

摘要:前几天在看一段.NET源代码的时候偶尔遇到了Double-checked Locking (双检锁)的一个使用,于是想到了以前看过的一些资料,写出来分享一下。 主要参考:The "Double-Checked Locking is Broken" Delaration (http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html) 双检锁是在多线程环境下很常见的一种实现singleton模式里lazy initialization的方法。 先看一下最这个模式的起源(注:代码为Java,不过这个问题适用各种语言,比如C++): // Single threaded version class Foo { private Helper helper = null; public Helper getHelper() { if (helper == null) helper = new Helper(); return helper; } // other functions and members... } 很容易看出,在多线程的情况下,上面的getHelper是不能正确工作的(可能生成多个helper实体)。 于是有下面的改进代码: // Correct multithreaded version class Foo { private Helper helper = null; public synchronized Helper......[阅读全文]

posted @ | Feedback (9) |

摘要: http://www.apple.com/iphone/ 官方网页说iPhone是3个产品合一的结果:手机,宽屏iPod,和Internet Device。 光看看这个界面,就让人有想在上面写点程序的冲动。 Palm界面的布局和iPhone还挺像的,但iPhone明显cool多了。我很高兴(或者说很庆幸?)Windows Mobile的界面是不同的风格,要真的和Apple较量UI设计,老实说我信心不怎么足。 It's good to have companies like Google and Apple around.  They make the life fun....[阅读全文]

posted @ | Feedback (10) |