在 .Net 中使用带有 X509 的证书吊销列表文件

Use Certificate Revocation List file with X509 in .Net

需要保护客户端-服务器通信。我在 .Net Core 中找到了一个 来生成 X509 证书(自签名)。但它确实缺乏如何在 .Net Framework 中使用证书吊销列表的任何信息。如果您能回答这些问题,我们将不胜感激:

How to create CRL file with .Net ( Without BouncyCastle ) ?

你不能,.NET 自然不会提供任何 API 来处理 X.509 CRL 文件。您必须使用第 3 方库。

Can it be created as any text file and signed after?

不,这不是文本文件。

If yes, what is the format of columns?

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

如果您不能使用第 3 方库,则必须了解 ASN.1(不是简单的东西),编写您自己的二进制解析器并根据 ASN.1 模块定义创建 X.509 CRL 解码器。这是二进制 ASN.1 解析器的示例:Asn1Reader.cs, so you can imagine the complexity in writing your own reliable parser. And an example of X.509 CRL decoder: X509CRL2.cs。我建议得到一些已经工作的东西并使用它。

How to add Certificate to Certificate Revocation List?

您必须使用 ASN.1 编码器创建 X.509 CRL builder/generator。 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).