从已签名和加密的邮件中获取公共证书

本文关键字:获取 证书 加密 | 更新日期: 2023-09-27 18:14:20

我将整个邮件作为一个字符串进行加密和签名。

outlook express默认情况下,如果接收方没有发送方的公共证书,则从邮件中提取公共证书并存储到证书管理器中。之后我们可以回复邮件也会加密并签名

我想用c#实现同样的功能。

如何从邮件文本中提取公共证书并将其存储到证书管理器中?

从已签名和加密的邮件中获取公共证书

这将取决于所使用的签名的类型,但是如果你知道电子邮件的结尾和电子邮件的签名部分从哪里开始,那么你应该能够使用。net中的一个名为system . security . cryptographic . pkcs . signedcms的类来解析这些信息。

这是一个伪代码示例…我做了一些假设,如果需要的话我们可以进一步讨论。函数引用期望在它们后面完成一些事情。如果需要的话,我们可以进一步讨论这些方法中需要什么。

var rawEmailBytes = pseudo_GetRawEmail();  // function that gets the raw email
var signedCmsBytes = psuedo_GetSignedCmsData(rawEmailBytes)   // would pull out the signed package bytes from the email
var signedCms = new SignedCms();
signedCms.Decode(signedCmsBytes)
foreach (var certificate in signedCms.Certificates) {
   psuedo_StoreCertificate(certificate)   // store certificate using the cert manager.
}

不能保证证书将存储在此集合中,因为证书是否包含在签名包中是可选的。如果您想进一步讨论,请添加注释。

另外,如果你想看关于这种签名类型的RFC,你可以在URL http://www.ietf.org/rfc/rfc3852.txt上阅读。具体来看一下Signed Data类型,从第5.1节

开始