【发布时间】:2012-07-16 14:45:25
【问题描述】:
我正在尝试在我的 .Net 程序中使用 OpenSSL 代码。代码如下:
openssl pkcs12 -in "My PassKit Cert.p12" -clcerts -nokeys -out certificate.pem
openssl pkcs12 -in "My PassKit Cert.p12" -nocerts -out key.pem
smime -binary -sign -signer certificate.pem -inkey key.pem -in manifest.json -out signature -outform DER
我尝试使用 .Net OpenSSL,但我完全不知道如何使用它,而且我找不到合适的文档。我决定使用 .Net 来执行相同的签名过程,代码如下:
var dataToSign = System.IO.File.ReadAllBytes(filePathToSign);
ContentInfo contentInfo = new ContentInfo(dataToSign);
X509Certificate2 signerCert = new X509Certificate2(System.IO.File.ReadAllBytes(signerPfxCertPath), signerPfxCertPassword);
var signedCms = new SignedCms(contentInfo, true);
var signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, signerCert);
signer.IncludeOption = X509IncludeOption.EndCertOnly;
signedCms.ComputeSignature(signer);
var myCmsMessage = signedCms.Encode();
var buf = Encoding.Convert(Encoding.UTF7, Encoding.UTF8, myCmsMessage);
return Encoding.UTF8.GetString(buf, 0, buf.Length);
但是 C# 和 OpenSSL 之间的结果是不一样的。有人可以帮帮我吗?
提前致谢!
【问题讨论】:
-
我遇到了同样的问题。我可以轻松地计算出清单计算,但这一点也不适合我。我怀疑你需要用完整的证书签名,而不仅仅是你回来的那一点,但我不确定(还)
标签: c# openssl x509certificate2 smime