最近项目(c#)使用了openssl颁发证书,在项目开发过程中,dn(证书信息)由后台生成,用户拿到dn值使用openssl生成证书,系统后台加签,用户得到完整证书,其中后台存在校验csr和cer的证书信息的环节,并且通过下面方法可以获取数字证书颁发者和持有者的名称信息,归纳总结如下,以供大家参考。
首先弄清楚几个概念:
KEY 通常指私钥。
CSR 是Certificate Signing Request的缩写,即证书签名请求,这不是证书,可以简单理解成公钥,生成证书时要把这个提交给权威的证书颁发机构。
CER - 还是certificate,还是证书,常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码,大多数应该是DER编码.
X.509 是一种证书格式.对X.509证书来说,认证者总是CA或由CA指定的人,一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。
OpenSSL 相当于SSL的一个实现,如果把SSL规范看成OO中的接口,那么OpenSSL则认为是接口的实现。接口规范本身是安全没问题的,但是具体实现可能会有不完善的地方,比如之前的"心脏出血"漏洞,就是OpenSSL中的一个bug.
下面是用c#读取cer.csr的dn值信息,注意这里的csr和cer都是base64格式的字符串
1.读取cer
使用System.Security.Cryptography.X509Certificates类库
byte[] rawData = System.Text.Encoding.Default.GetBytes(cer);
X509Certificate2 x = new X509Certificate2(rawData);
string dn2 = x.Subject;
2.读取csr
使用CERTENROLLLib类库
CX509CertificateRequestPkcs10 csrRequest = new CX509CertificateRequestPkcs10();
csrRequest.InitializeDecode(csr, EncodingType.XCN_CRYPT_STRING_BASE64_ANY);
csrRequest.CheckSignature();
string dn2 = csrRequest.Subject.Name;