Safari Push Package:如何修复Apple过期的WWDR证书

时间:2016-02-23 10:07:43

标签: c# cryptography apple-push-notifications pkcs#7

嗯,我们都知道,即​​将发生的事情,Apple WWDR证书已经在情人节过期了(我称之为#34;开发者喜欢")来自Apple的news release

我使用C#为Safari生成推送包,而意外,这不再适用。这是我在日志记录端点中收到的消息:

  

{" logs":["推送包的签名验证失败"]}

这就是我的旧PKCS#7签名代码的样子:

alert(easeyPeasy.inputs[0])

Apple还要求"将路径传递给额外证书参数"的更新中间件。

所以我尝试了这个:

//  Sign the message with the private key of the signer.
static byte[] PKCS7SignMessage(byte[] message, X509Certificate2 signerCertificate)
{
    //  Place message in a ContentInfo object.
    //  This is required to build a SignedCms object.
    ContentInfo contentInfo = new ContentInfo(message);

    //  Instantiate SignedCms object with the ContentInfo above.
    //  Has default SubjectIdentifierType IssuerAndSerialNumber.
    //  Has default Detached property value false, so message is
    //  included in the encoded SignedCms.
    SignedCms signedCms = new SignedCms(contentInfo, true);

    //  Formulate a CmsSigner object for the signer.
    CmsSigner cmsSigner = new CmsSigner(signerCertificate);
    cmsSigner.IncludeOption = X509IncludeOption.EndCertOnly;        

    //  Sign the CMS/PKCS #7 message.
    signedCms.ComputeSignature(cmsSigner);

    //  Encode the CMS/PKCS #7 message.
    return signedCms.Encode();
}

它没有用。(推送包的签名验证失败)

后来我试图改变这一行:

X509Certificate2 appleIntermediate = new X509Certificate2();
appleIntermediate.Import(@"Path-to-new-WWRD.cer");
cmsSigner.Certificates.Add(appleIntermediate);

它没有用。我有异常说:

  

"无法将证书链构建到受信任的root权限"。

好的,现在我决定:

  • 将所有Apple CA根证书添加到本地计算机的可信证书存储区。
  • 将续订的WWRD证书添加到本地计算机的中间证书库。
  • 重新启动该过程并再次尝试该代码。好消息,它现在再次签署,理论上包括整个证书链。

但是:它没有用。(推送包的签名验证失败)

根据Apple的说法,解决这个问题是件小事:

  

Safari推送通知

     

更新您的通知包签名服务器,以在2016年2月14日之前包含您的网络推送证书和续订的中间证书。在此日期之后,新用户将无法在您的服务器被注册之前注册来自您网站的推送通知更新。如果您使用openssl_pkcs7_sign函数仅使用Web推送证书对推送包进行签名,则应将路径传递给更新证书参数的更新中间件。

现在,这在计划英语中意味着什么? 我该如何将其应用于C#上下文?

1 个答案:

答案 0 :(得分:0)

Apple不想要整个链条。他们只希望包含您的证书和中间证书。所以你的代码应该是这样的:

<main>
    <p>p1</p>
    <p>p2</p>
    <q>
        <z>z1</z>
        <a>a1</a>
        <b>
            <c>c1</c>
        </b>
    </q>
</main>