X509Certificate类解析证书的差异,算是.Net的BUG吗?

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:

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

首先,我们找一张证书(大家可以在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,如需转载请自行联系原作者


相关文章
|
1月前
|
缓存 JavaScript 前端开发
Vue3与Vue2生命周期对比:新特性解析与差异探讨
Vue3与Vue2生命周期对比:新特性解析与差异探讨
86 2
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
100 3
|
1月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
8天前
|
存储 关系型数据库 MySQL
MySQL 字段类型深度解析:VARCHAR(50) 与 VARCHAR(500) 的差异
在MySQL数据库中,`VARCHAR`类型是一种非常灵活的字符串存储类型,它允许存储可变长度的字符串。然而,`VARCHAR(50)`和`VARCHAR(500)`之间的差异不仅仅是长度的不同,它们在存储效率、性能和使用场景上也有所不同。本文将深入探讨这两种字段类型的区别及其对数据库设计的影响。
19 2
|
24天前
|
存储 Java API
详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
【10月更文挑战第19天】深入剖析Java Map:不仅是高效存储键值对的数据结构,更是展现设计艺术的典范。本文从基本概念、设计艺术和使用技巧三个方面,详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
41 3
|
28天前
|
测试技术 API 开发者
精通.NET单元测试:MSTest、xUnit、NUnit全面解析
【10月更文挑战第15天】本文介绍了.NET生态系统中最流行的三种单元测试框架:MSTest、xUnit和NUnit。通过示例代码展示了每种框架的基本用法和特点,帮助开发者根据项目需求和个人偏好选择合适的测试工具。
37 3
|
1月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
64 2
|
22天前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
|
30天前
|
供应链 网络协议 数据安全/隐私保护
|
30天前
|
缓存 资源调度 JavaScript
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
31 0

推荐镜像

更多