.NET中的X509Certificate2和X509Certificate有什么区别?

两者有什么区别?

x509Certificate是在.NET v1.0 / 1.1中引入的,并且(相对)function有限。 它可以用来获取有关现有证书(有效date,发行人等)的信息。 它有简单的方法/操作(即从磁盘读取证书)。

x509Certificate2是具有附加function的x509Certificate的子类。

  • 它代表了一个实际的X509证书。
  • 这是.NET Framework 2.0版中的新function。
  • 通过此类,您可以访问所有V2和V3属性(权限密钥标识符和密钥用法)。
  • 它支持从证书存储装载证书。

为了完整起见,下面是在@ dommer的答案中链接到的网站的相关部分的副本,因为该网站可能不再起作用,并且只有在Google的caching中才知道多长时间:

除了X509Certificate类之外,框架的1.1版本几乎没有什么能够让你操作证书。 实际上,v1.1 X509Certificate类只提供了基本的支持:它只允许访问X509版本1字段(比如有效date,有效date,主题和公共密钥),而不是版本2字段(如权限密钥标识符)和版本3字段(如密钥用法)。 没有支持从证书存储加载证书,也没有设施访问证书撤销列表或证书信任列表。 微软利用Web服务增强(WSE)工具箱扩展了证书类并提供了访问证书存储的类。 这些类现在可以在.NET 3.0 / 2.0框架库中find。

第一个大的变化是从X509Certificate派生出来的一个新类,名为X509Certificate2。 访问X509证书字段的方法已被废弃,现在该类具有访问这些字段的属性。 另外,如果证书有一个相关的私钥,那么这个类就可以访问这个密钥。 有一些方法允许您在私钥被一个私钥保护的情况下提供密码。 密码是通过一个SecureStringparameter passing的,这个参数是一个特殊的types,它确保当对象不再被使用时,它所占用的内存将被覆盖,这样密码就不能被机器上的另一个进程读取。 安全string和其他forms的受保护数据将在后面的章节中介绍。

由于X509Certificate2派生自X509Certificate,这意味着您可以通过X509Certificate2类调用静态方法CreateFromeCertFile和CreateFromSignedFile。 但是,这些方法返回一个X509Certificate对象,您不能将其转换为X509Certificate2对象。 X509Certificate类在版本3.0 / 2.0中得到了改进:它提供了访问某些X509字段的属性; 它提供了导入和导出方法来初始化字节数组中的对象,或者从证书中生成一个字节数组,并且它具有构造函数,它们将从文件(ASN.1 DER)和字节数组中创build一个对象。 有趣的是,X509Certificate2类有一个构造函数,可以从X509Certificate对象创build一个X509Certificate2对象。 请注意,虽然X509Certificate对象只能显示X509v1字段,但可以从X509v3证书创build,因此如果您从X509Certificate对象创buildX509Certificate2对象,则可以访问X509v3字段。

要将X.509证书从“X509Certificate”转换为“X509Certificate2”,请尝试如下所示:

 X509Certificate X509 = sslStream.RemoteCertificate; X509Certificate2 X5092 = new X509Certificate2(X509);