需要保护客户端与服务器之间的通信。我在.Net Core中发现一个nice approach,以生成X509证书(自签名)。但是,实际上没有任何信息可以使用.Net Framework中的证书吊销列表。对于这些问题的答案将不胜感激:
如何使用.Net(没有BouncyCastle)创建CRL文件?可以将其创建为任何文本文件并在其后签名吗?如果是,列的格式是什么?
我是否可以将CRL文件添加到证书中,对吗?据我所知,证书的更改会破坏它。
如何将证书添加到证书吊销列表?
答案 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条目由证书序列号(整数)和吊销日期(UTCTime
或GeneralizedTime
)组成。 (可选)可能会有CRL条目扩展名,例如吊销原因(ENUMERATED
)。