好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

X509Certificate类解析证书的差异

X509Certificate类解析证书的差异

看到dudu发现Cache的BUG问题,于是乎,我也来写一篇,之前发现的一个问题。

首先,我们找一张证书(大家可以在 ie 浏览器的“ Internet  选项” à 内容 à 证书 , 选择一张证书保存到文件或直接打开看看)。可以看到使用者的信息,如下图所示:

然后,我们使用 .net  的 X509Certificate 类的解析证书内容。具体代码如下:

X509Certificate  x509 =  new   X509Certificate ( @"d:\1.cer" );

             var  subject = x509.Subject;

             Console .WriteLine(subject);

             Console .Read();

运行代码,可以看到如下内容:

CN=Microsoft Windows Hardware Compatibilioration, L=Redmond, S=Washington, C=US

现在问题来了,就是这个 S=Washington 的项和其他安全库解析的不一样,其他的解析出来都是 ST=Washington 。

按照 RFC 规范这个 S 项目表示 StateOrProvinceName 。解析不一样的结果就是:由于 .net 中安全类实现很有限,如果混合其他的安全库一起使用,在解析证书时不一样,而且还会导致通过拆分这段字符串来查找 ST 就会出错,还有如果计算这段字符串的 HASH 值也就不一样了。

于是乎,查找了相关的 RFC 规范,其中 RFC 1779  ( A String Representation of Distinguished Names )中给出了标准形式是:

                       Key     Attribute (X.520 keys)

                       ------------------------------

                       CN      CommonName

                       L       LocalityName

                       ST      StateOrProvinceName

                       O       OrganizationName

                       OU      OrganizationalUnitName

                       C       CountryName

                       STREET StreetAddress

RFC 2256 (  A Summary of the X.500(96) User Schema for use with LDAPv3 )也是这样描述的:

   This attribute contains the full name of a state or province
   (stateOrProvinceName).
    ( 2.5.4.8 NAME 'st' SUP name )

就搞不清楚, .Net 的实现或者说是 WINDOWS 的实现,参考的规范不一样?还是本来实现就有问题存在 BUG ?还是说微软故意不走寻常路?

      http://www.cnblogs.com/xray2005/archive/2011/11/07/2240445.html

      本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于X509Certificate类解析证书的差异的详细内容...

  阅读:55次