使用DERCS中PKCS#7格式的数字证书签署Xml(ITU-T X.690建议书)

时间:2014-05-28 08:46:47

标签: c# digital-signature pkcs#7 pfx

我有.xml个文件,必须使用digital certificate格式PKCS#7 version 1.5 (RFC 2315)DER (ITU-T Recommendation X.690

进行签名

.xml将被发送给政府。 WebService只接受我上面提到的格式。

我能做的事 - 感谢this website是数字签名.xml,其中.pfx文件是我用Certificate Export Wizard生成的.xml文件。我用来签名的课程在提到的网站或here上。

到目前为止,我试图理解的是,我需要根据.pfx标准使用X.690文件签署using System.Security.Cryptography.X509Certificates; ,但我只能访问此命名空间:

.pfx

显然是X.509格式。

注意:

我有些困惑 - 将证书导出到Internet Explorer - Certificate Export Wizard我正在使用PKCS#12我可以:

是 - 导出私钥 - 然后会在.pfx中生成Cryptographic Message Syntax Standard - PKCS#7

否 - 不导出私钥 - 根据标准.p7b证明我认为我需要但我会收到X.690个文件

我必须说我是证书和数字签名的新手,所以我甚至不确定我是否正确导出证书,第二件事是我如何根据bool res = false; try { byte[] certBytes = System.IO.File.ReadAllBytes(pvkPath); X509Certificate2 cert = new X509Certificate2(certBytes, certPass); XmlDocument doc = new XmlDocument(); doc.Load(xmlPath); // sign the document with the private key of the certificate XmlDsig.SignXml(doc, cert); // save the document doc.Save(xmlSavePath); // verify that the document has a signature bool hasSignature = XmlDsig.HasSignatureElement(doc); return res = true; } catch (Exception) { return res; } 标准签名。

我可以知道如何根据X.690格式签名吗?

感谢大家的时间和回复。

我的代码如下:

{{1}}

1 个答案:

答案 0 :(得分:1)

PKCS#7 / CMS格式的数字签名是blob,其中包含您的XML数据+签名者的x509公钥证书(.cer文件)+数字签名。整个blob以ASN 1.0格式(X690)编码。由于缺少原始数据或签名者证书,blob可能会有变化。此变体称为分离签名。

使用签名者的私钥对xml文件进行签名时会生成数字签名。当您将XML文件+签名者的公钥(如X509 .cer文件)+数字签名发送给有兴趣验证它的一方时,可以验证此签名。

PFX / p12是一个包含签名者私钥和公钥的容器。您可以从政府或政府批准的密钥管理人处获得此密钥对。然后,您将使用此PFX执行数字签名。

cryptoAPI支持PKCS#7。

以上是基础知识。这样可以让您更清楚地查询。