zoukankan      html  css  js  c++  java
  • 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?还是说微软故意不走寻常路?

         本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    STM32-串口通信
    STM32-系统计时器(systick)
    字符串操作常用的函数
    基本MarkDown语法
    结构
    python入门
    贪心算法小结
    POJ1631_高深DP
    POJ3046ANT_COUNTING
    POJ1742coins
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2434704.html
Copyright © 2011-2022 走看看