AWS/Apple 推送证书 -- 设置私钥错误

Posted

技术标签:

【中文标题】AWS/Apple 推送证书 -- 设置私钥错误【英文标题】:AWS/Apple Push certificate -- error setting private key 【发布时间】:2016-10-04 20:51:59 【问题描述】:

我正在尝试按照these 的说明设置我的 S3 API 以向我的 ios 应用发送推送通知。

我把证书问题弄得一团糟,所以我希望有人能帮我解决这些问题。

到目前为止,我已经创建了一个 CSR,将其上传到 Apple Dev 门户,并下载了一个 .cer 文件。然后我将cer 转换为pem

openssl x509 -in apns-dev.cer -inform DER -out apns-dev.pem

然后我遇到了“打开钥匙串访问,选择钥匙,然后突出显示您的应用程序私钥”的说明。不知道我的“应用程序私钥”是什么,我尝试了几件事:

    获取应用程序 cert 文件夹中预先存在的私钥文件(据我所知,这是一个 不是用于生成上述 CSR 的 RSA 私钥)。 将我的默认系统私钥导出为p12,然后按照 AWS 说明将其转换为pem 密钥。 尝试直接从我在 Keychain Access 中的系统私钥生成新的 CSR

但是,每当我按照说明“测试”私钥/公钥对 (openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev.pem -key apns-private.pem) 时,都会得到以下信息:

error setting private key
41047:error:0B080074:x509 certificate routines:X509_check_private_key:key values     mismatch:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-59.60.1/src/crypto/x509/x509_cmp.c:406:

我查看了以下问题,但无法使用他们的答案来解决这个问题:

Does the apple push notification distribution certificate signing request need to be the same as that used for the distribution cert to sign the app? - 当我尝试在 Keychain Access 中“扩展”证书时,我看到的只是信息。没有私钥信息,我无法“导出 2 个项目”

Apple Push Notification error setting private key(这里自己给的答案和上面的有冲突,反正我已经没有原来的CSR了)

Unable to load client certificate private key file - 我的私钥文件不是空的,而且我确实输入了正确的密码

知道会发生什么吗?我只是在这里在黑暗中拍摄。

【问题讨论】:

【参考方案1】:

不要使用 Apple 的说明来生成 CSR。

    生成密钥:

    openssl genrsa -out $app.key 2048
    

    生成 CSR:

    openssl req -new -key $app.key -out $app.csr
    

    并输入相关数据。

    将 CSR 上传到 Apple。下载证书。

    将证书转换为 PEM:

    openssl x509 -inform DER -in $app.cer -out $app.pem
    

现在您拥有$app.key 中的密钥和$app.pem 中的PEM 编码证书。然后,您可以将两者都安装在将连接到 APNS 的盒子上(取决于您使用的软件,它们可能是单独的文件,或者您可以只是将密钥附加到证书文件中)。

【讨论】:

以上是关于AWS/Apple 推送证书 -- 设置私钥错误的主要内容,如果未能解决你的问题,请参考以下文章

golang实现ios推送

找不到 Apple 开发推送服务的私钥

将推送通知证书导出为 P12

使用 OpenSSL 实现私钥和证书的转换

在 Keychain Access 上安装证书时缺少私钥

腾讯云服务器导入ssl证书提示输入密码,申请时没有输入私钥