在.Net中将证书吊销列表文件与X509一起使用

时间:2018-09-09 11:57:15

标签: .net x509certificate2 .net-core-2.0

需要保护客户端与服务器之间的通信。我在.Net Core中发现一个nice approach,以生成X509证书(自签名)。但是,实际上没有任何信息可以使用.Net Framework中的证书吊销列表。对于这些问题的答案将不胜感激:

  • 如何使用.Net(没有BouncyCastle)创建CRL文件?可以将其创建为任何文本文件并在其后签名吗?如果是,列的格式是什么?

  • 我是否可以将CRL文件添加到证书中,对吗?据我所知,证书的更改会破坏它。

  • 如何将证书添加到证书吊销列表?

1 个答案:

答案 0 :(得分:0)

  

如何使用.Net(没有BouncyCastle)创建CRL文件?

您不能,.NET迄今为止根本不提供任何API来处理X.509 CRL文件。您必须使用第三方库。

  

可以将其创建为任何文本文件并在之后签名吗?

否,它不是文本文件。

  

如果是,列的格式是什么?

X.509 CRL使用抽象语法表示法一(ASN.1)进行内部表示,并且RFC 5280 Appendix A.1 (page 118)中定义了ASN.1模块。不幸的是,.NET没有提供用于处理原始ASN.1数据的工具(仅适用于知名和受支持的高级类型)。

如果您不能使用第三方库,则必须了解ASN.1(并非易事),编写自己的二进制解析器,并根据ASN.1模块定义创建X.509 CRL解码器。这是二进制ASN.1解析器的示例:Asn1Reader.cs,因此您可以想象编写自己的可靠解析器的复杂性。 X.509 CRL解码器的示例:X509CRL2.cs。我建议让某些东西已经起作用并使用它。

  

如何将证书添加到证书吊销列表中?

您将必须使用ASN.1编码器创建X.509 CRL构建器/生成器。 CRL条目类型定义如下:

 revokedCertificates     SEQUENCE OF SEQUENCE  {
      userCertificate         CertificateSerialNumber,
      revocationDate          Time,
      crlEntryExtensions      Extensions OPTIONAL
                               -- if present, version MUST be v2
                           }  OPTIONAL,

如果您不熟悉ASN.1,这几乎没有任何意义,但可以揭示一些有用的内容。例如,CRL条目由证书序列号(整数)和吊销日期(UTCTimeGeneralizedTime)组成。 (可选)可能会有CRL条目扩展名,例如吊销原因(ENUMERATED)。