Я пытаюсь подписать файл manifest.json на С# для пропусков Apple Passbook. Я следил за Руководство Apple по подписанию пропусков и просмотрела сообщения здесь и здесь а>. Когда я выполняю код, в строке 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, но прежде всего это создал мне некоторые проблемы, а во-вторых, мне действительно нужно только подписать файл манифеста, не все остальное, что предоставляет библиотека.