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。非常感谢您的建议。以下内容应该对您有所帮助。