我正在尝试在我的.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之间的结果并不相同。有人可以帮帮我吗?
提前致谢!
答案 0 :(得分:4)
我最终得到了这个工作!
首先,你必须去这里,并安装苹果ROOT证书:
http://www.apple.com/certificateauthority/
(这是第一个)。将其安装到受信任的根颁发机构中。 Mac已经有了这个。
其次,将开发人员证书安装为受信任的根权限,该权限位于开发人员门户中,您可以在其中添加设备,制作passkit密钥,所有这些
https://developer.apple.com/ios/manage/certificates/team/index.action
(你需要登录)
然后你需要在开发门户网站中生成你的passkit密钥,下载它,在mac上安装它,然后用私钥导出它作为.p12文件。
然后您可以将此文件移动到Windows计算机并使用它。在生成清单之后我使用了这段代码:
var cert = new X509Certificate2(@"path-to-your.p12", "password");
var buffer = File.ReadAllBytes(Path.Combine(basePath, "manifest.json"));
ContentInfo cont = new ContentInfo(buffer);
var cms = new SignedCms(cont, true);
var signer = new CmsSigner(SubjectIdentifierType.SubjectKeyIdentifier, cert);
signer.IncludeOption = X509IncludeOption.ExcludeRoot;
cms.ComputeSignature(signer);
var myCmsMessage = cms.Encode();
File.WriteAllBytes(Path.Combine(basePath, "signature"), myCmsMessage);
抱歉,这是一个相当混乱的代码,但它有效:)
不要忘记设置
“passTypeIdentifier”:“pass.com.yourcompany.NameOfYourPass”, “teamIdentifier”:“你的团队ID”,
pass.json中的!