签名apple的存折通行证

本文关键字:通行证 apple 签名 | 更新日期: 2023-09-27 17:51:11

我正在尝试签署舱单。Apple Passbook pass的c# json文件。我遵循了苹果的通行证签名指南,并在这里和这里查看了帖子。当我执行代码时,在signedCms.ComputeSignature(cmsSigner);行出现一个CryptographicException,表示

键不存在

这是我目前拥有的代码:

    private void button2_Click(object sender, EventArgs e)
    {
        String manifest = System.IO.File.ReadAllText(@"C:'Users'Administrator'Downloads'Testpass'Testpass'manifest.json");
        byte[] msgBytes = Encoding.Unicode.GetBytes(manifest);
        byte[] sign = SignMsg(msgBytes, findCertificate(true));
        //byte[] sign = signit(manifest);
        File.WriteAllBytes(@"C:'Users'Administrator'Downloads'Testpass'Testpass", sign);

    }
    private byte[] SignMsg(Byte[] msg, X509Certificate2 signerCert)
    {
        ContentInfo contentInfo = new ContentInfo(msg);
        SignedCms signedCms = new SignedCms(contentInfo, true);
        X509Certificate2 developerCertificate = new X509Certificate2(@"C:'Users'Administrator'Downloads'pass.cer");
        X509Certificate2 appleWWDRCA = new X509Certificate2(@"C:'Users'Administrator'Downloads'AppleWWDRCA.cer");
        CmsSigner cmsSigner = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, developerCertificate);
        cmsSigner.IncludeOption = X509IncludeOption.EndCertOnly;
        cmsSigner.Certificates.Add(appleWWDRCA);
        cmsSigner.SignedAttributes.Add(new Pkcs9SigningTime(DateTime.Now));
        //  Sign the CMS/PKCS #7 message.
        signedCms.ComputeSignature(cmsSigner);
        //  Encode the CMS/PKCS #7 message.
        return signedCms.Encode();
    }

是否有必要从Windows证书存储中获取证书,还是从文件系统中获取证书?任何关于如何解决问题的帮助是赞赏的!

PS:我也看过DotNet-Passbook,但首先它给我带来了一些问题,其次,我真的只需要签名manifest文件,而不是库提供的其他一切。

签名apple的存折通行证

我是。net-passbook的创造者。

这个错误看起来像您的证书不包括私钥组件。

当您在Windows中打开证书时,它将指示是否包含私钥。