C# 使用DER中PKCS#7格式的数字证书签署Xml(ITU-T Rec.X.690)
我有一个C# 使用DER中PKCS#7格式的数字证书签署Xml(ITU-T Rec.X.690),c#,digital-signature,pkcs#7,pfx,C#,Digital Signature,Pkcs#7,Pfx,我有一个.xml文件,必须使用数字证书签名,格式为PKCS#7版本1.5(RFC 2315)和DER(ITU-T建议X.690 那.xml将被发送到一个只接受我上面提到的格式的政府网站服务 我所能做的-多亏了.xml和.pfx文件的数字签名,该文件是我使用证书导出向导生成的,如下所述。我用来签名的类已登录到上述网站或 根据我目前试图了解的情况,我需要根据X.690标准,使用.pfx文件对.xml进行签名,但我只能访问此命名空间: using System.Security.Cryptograph
.xml
文件,必须使用数字证书
签名,格式为PKCS#7版本1.5(RFC 2315)
和DER(ITU-T建议X.690
那.xml
将被发送到一个只接受我上面提到的格式的政府网站服务
我所能做的-多亏了.xml
和.pfx
文件的数字签名,该文件是我使用证书导出向导生成的,如下所述。我用来签名的类已登录到上述网站或
根据我目前试图了解的情况,我需要根据X.690
标准,使用.pfx
文件对.xml
进行签名,但我只能访问此命名空间:
using System.Security.Cryptography.X509Certificates;
这显然适用于X.509格式
注:
有几件事我很困惑-要将证书导出到.pfx
我正在使用Internet Explorer-证书导出向导
,从那里我可以:
是-导出私钥-然后它将在PKCS#12
中生成,但.pfx
否-不导出私钥-根据标准加密消息语法标准-PKCS#7
认证,我想我需要它,但我会收到.p7b
文件
我必须说,我是证书和数字签名的新手,所以我甚至不确定我是否正确导出了证书,第二件事是如何根据X.690
标准进行签名
我可以知道如何按照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; }
PKCS#7/CMS格式的FOD数字签名是包含XML数据+签名者的x509公钥证书(.cer文件)+数字签名的blob。整个blob以ASN 1.0格式(X690)编码。由于缺少原始数据或签名者证书,blob中可能存在变化,这种变化称为分离签名
当您使用签名者的私钥对xml文件进行签名时,将生成数字签名。当您将xml文件+签名者的公钥(作为X509.cer文件)+数字签名发送给有兴趣验证签名的一方时,可以验证此签名
PFX/p12是一个包含签名者私钥和公钥的容器。您可以从政府或政府批准的密钥保管人处获得此密钥对。然后,您将使用此PFX执行数字签名
PKCS#7由支持
以上是基础知识。这将使您的查询更加清晰。您好,非常感谢您的回答,它清除了整个过程。我在过去的两天中尝试使用.pfx
文件的私钥对XML进行数字签名,因此我生成了新的文件.XML.p7m
文件,您认为该文件是我需要发送两个部分-我需要将公钥附加到它吗?再次非常感谢。PKCS#7格式已经定义。许多API都支持这一点。其中一个是CryptoAPI,另一个是OpenSSL,BountyCastle。您使用什么API对文件进行签名?您的API将允许您附加公钥证书。Weel我正在使用BountyCastle代码>到目前为止,我的代码在这里,它生成的.p7b
文件有1KB。但是根据pkcs7必须发送的原始.xml
文件有5KB。非常感谢您的建议。以下内容应该对您有所帮助。