如何创建要存储在托管服务器中的.pem文件以获取APN有效负载数据?
答案 0 :(得分:340)
以下是我所做的,来自:blog.boxedice.com和“iPhone高级项目”第10章,作者是Joe Pezzillo。
使用钥匙串中的aps_developer_identity.cer:
apns-dev-cert.p12
文件,您可以访问它。无需输入密码。下一个命令在Mac终端中为PEM格式生成证书(隐私增强邮件安全证书):
openssl pkcs12 -in apns-dev-cert.p12 -out apns-dev-cert.pem -nodes -clcerts
在服务器上使用chmod 400设置此未加密密钥的文件权限。
答案 1 :(得分:209)
开发阶段:
步骤1:从证书.p12创建证书.pem
命令: openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12
第2步:从Key .p12创建密钥.pem
命令: openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12
第3步:可选(如果您要删除第二步中询问的密码短语)
命令: openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem
第4步:现在我们必须合并Key .pem和Certificate .pem,以便在App的开发阶段获得推送通知所需的开发.pem
命令: cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem (If 3rd step is performed )
命令: cat apns-dev-cert.pem apns-dev-key.pem > apns-dev.pem (if not)
步骤5:检查证书有效性和与APNS的连接
命令: openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev-cert.pem -key apns-dev-key.pem (If 3rd step is not performed )
命令: openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev-cert.pem -key apns-dev-key-noenc.pem (If performed )
生产阶段:
步骤1:从证书.p12创建证书.pem
命令: openssl pkcs12 -clcerts -nokeys -out apns-pro-cert.pem -in apns-pro-cert.p12
第2步:从Key .p12创建密钥.pem
命令: openssl pkcs12 -nocerts -out apns-pro-key.pem -in apns-pro-key.p12
第3步:可选(如果您要删除第二步中询问的密码短语)
命令: openssl rsa -in apns-pro-key.pem -out apns-pro-key-noenc.pem
第4步:现在我们必须合并Key .pem和Certificate .pem以获得应用生产阶段推送通知所需的生产.pem
命令: cat apns-pro-cert.pem apns-pro-key-noenc.pem > apns-pro.pem (If 3rd step is performed )
命令: cat apns-pro-cert.pem apns-pro-key.pem > apns-pro.pem (if not)
步骤5:检查证书有效性和与APNS的连接
命令: openssl s_client -connect gateway.push.apple.com:2195 -cert apns-pro-cert.pem -key apns-pro-key.pem (If 3rd step is not performed )
命令: openssl s_client -connect gateway.push.apple.com:2195 -cert apns-pro-cert.pem -key apns-pro-key-noenc.pem
(如果执行)
答案 2 :(得分:57)
步骤:
这为您提供了三个文件:
PushChatKey.p12
)aps_development.cer
转到您下载文件的文件夹,在我的情况下是桌面:
$ cd ~/Desktop/
将.cer文件转换为.pem文件:
$ openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem
将私钥的.p12文件转换为.pem文件:
$ openssl pkcs12 -nocerts -out PushChatKey.pem -in PushChatKey.p12
输入导入密码:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
首先需要输入.p12文件的密码,以便openssl可以读取它。然后,您需要输入将用于加密PEM文件的新密码。在本教程中,我使用“pushchat”作为PEM密码。你应该选择更安全的东西。 注意:如果您没有输入PEM密码,openssl将不会给出错误消息,但生成的.pem文件中不会包含私钥。
最后,将证书和密钥合并到一个.pem文件中:
$ cat PushChatCert.pem PushChatKey.pem > ck.pem
答案 3 :(得分:19)
启动终端应用程序,并在提示
后输入以下命令 openssl pkcs12 -in CertificateName.p12 -out CertificateName.pem -nodes
答案 4 :(得分:10)
- >> Apple's own tutorial<< - 是我遇到过的唯一可用的指令集。这是直截了当的,我可以确认它在linux php服务器和windows php服务器上运行得非常出色。
您可以在页面底部找到他们的5步创作过程。
答案 5 :(得分:4)
你可以看看这里。我有详细的流程描述过程,从创建证书到app键到配置文件,最终到了pem。 http://docs.moengage.com/docs/apns-certificate-pem-file
答案 6 :(得分:3)
我建议一个更简单的解决方案。只需使用Certifire Certifire是一个macOS应用程序,只需单击一下即可生成Apple推送通知证书。
以下是步骤:
1.下载应用程序。
2.使用Apple开发人员帐户凭据登录
3.选择App-ID
4.单击“生成”按钮
你完成了!
您将获得.pem格式以及.p12格式的APN证书。
更重要的是,你也会得到组合.pem和.p12(key + cert)!
更重要的是,您还将获得所有这些证书的无密码版本!
答案 7 :(得分:2)
注意:您必须在App Store Connect中具有Team Agent或Admin角色才能执行以下任何任务。如果您不属于App Store Connect团队的一员,这可能不会影响您。
将推送通知发送到iOS应用程序需要创建输入密钥。过去,这是一个使用SSL密钥和证书的繁琐过程。每个SSL证书都特定于一个iOS应用程序。苹果在2016年推出了一种新的身份验证密钥机制,该机制更可靠,更易于使用。与iOS应用程序相比,新的身份验证密钥更加灵活,易于维护并且可以应用于更多应用。
尽管引入认证密钥已经有好几年了,但并不是每个服务都支持它们。 FireBase和Amazon Pinpoint支持身份验证密钥。 Amazon SNS,Urban Airship,Twilio和LeanPlum没有。许多开源软件包尚不支持身份验证密钥。
要创建所需的SSL证书并将其导出为包含公钥和私钥的PEM文件,请执行以下操作:
如果您已经在Apple Developer Center网站上为该应用程序设置了SSL证书,则可以跳过以将证书转换为PEM格式。 Keep in mind that you will run into problems if you do not also have the private key that was generated on the Mac that created the signing request that was uploaded to Apple.
继续阅读,了解如何避免丢失该私钥。
Xcode不控制用于推送通知的证书或密钥。要创建按键并为应用程序启用推送通知,您必须访问Apple Developer Center网站。帐户的“证书,标识符和配置文件”部分控制应用程序ID和证书。
要访问证书和个人资料,您必须具有付费的Apple Developer Program会员资格或成为该团队的成员。
使用推送通知的应用程序不能使用通配符应用程序ID或供应配置文件。每个应用都要求您在Apple Developer Center门户中设置一个应用ID记录,以启用推送通知。
创建用于推送通知的SSL证书是一个完成多个任务的过程。每个任务都有几个步骤。所有这些都是导出P12或PEM格式的密钥所必需的。在继续之前,请查看步骤。
要创建证书,您需要在Mac上发出证书签名请求(CSR),并将其上传到Apple。
稍后,如果您需要将此证书导出为pkcs12(aka p12)文件,则需要使用同一Mac 中的钥匙串。创建签名请求后,“钥匙串访问”会在默认钥匙串中生成一组钥匙。这些密钥对于使用Apple将根据签名请求创建的证书是必需的。
最好有一个单独的钥匙串,专门用于开发的凭据。如果这样做,请在使用证书助手之前确保将此钥匙串设置为默认值。
在创建证书签名请求时,证书助手会在默认钥匙串中生成两个加密密钥。重要的是,将开发钥匙串设为默认钥匙串,以使钥匙位于正确的钥匙串中。
创建签名请求会生成一对密钥。在上传签名请求之前,请验证开发钥匙串是否具有密钥。它们的名称将与签名请求中使用的通用名称相同。
创建证书签署请求后,将其上传到Apple开发人员中心。 Apple将根据签名请求创建推送通知证书。
您的开发钥匙串现在应该在“钥匙串访问”中的我的证书下显示带有私钥的推送证书:
这时应该备份开发钥匙串。许多团队将推送证书保存在安全的USB驱动器上,致力于内部版本控制或使用Time Machine等备份解决方案。由于开发钥匙串不包含任何个人代码签名凭据,因此可以在不同的团队成员之间共享。
钥匙串文件位于
~/Library/Keychains
中。
某些第三方推送服务要求使用“隐私增强邮件”(PEM)格式的证书,而其他一些则要求使用“公共密钥密码术标准#12”(PKCS12或P12)。从Apple下载的证书可用于以这些格式导出证书-但前提是您保留私钥。
答案 8 :(得分:1)
这是我在安装OpenSSL之后在Windows 7上执行此操作的方法(链接转到Win32安装程序,选择最新版本而不是轻量版本)。
使用此方法,您只需要从Apple下载.cer
文件。
c:\OpenSSL-Win32\bin\openssl.exe x509 -in aps_development.cer -inform DER -out developer_identity.pem -outform PEM
这将创建一个文件,您需要添加私钥。
-----开始私钥-----
MIIEuwIBADANBgkqhk ....等
MIIEuwIBADANBgkqhk ....等
MIIEuwIBADANBgkqhk ....等
MIIEuwIBADANBgkqhk ....等
-----结束私钥-----
-----开始证书-----
AwIBAgwIBADAwIBADA ....等
AwIBAgwIBADAwIBADA ....等
AwIBAgwIBADAwIBADA ....等
-----结束证书-----
就是这样。
答案 9 :(得分:1)
我永远不会记住创建openssl
文件所需的.pem
命令,所以我制作了这个bash脚本来简化这个过程:
#!/bin/bash
if [ $# -eq 2 ]
then
echo "Signing $1..."
if ! openssl pkcs12 -in $1 -out $2 -nodes -clcerts; then
echo "Error signing certificate."
else
echo "Certificate created successfully: $2"
fi
else
if [ $# -gt 2 ]
then
echo "Too many arguments"
echo "Syntax: $0 <input.p12> <output.pem>"
else
echo "Missing arguments"
echo "Syntax: $0 <input.p12> <output.pem>"
fi
fi
将其命名为signpem.sh
,并将其保存在用户的文件夹(/Users/<username>
?)中。创建文件后,执行chmod +x signpem.sh
使其可执行,然后运行:
~/signpem myCertificate.p12 myCertificate.pem
将创建myCertificate.pem
。
答案 10 :(得分:1)
如果您的密钥链访问中已经有p12文件,那么创建.Pem文件的方法最简单。
打开终端并输入以下命令:
For Devlopment openssl pkcs12 -in apns-div-cert.p12 -out apns-div-cert.pem -nodes -clcerts
生产 openssl pkcs12 -in apns-dist-cert.p12 -out apns-dist-cert.pem -nodes -clcerts
使用以下名称重命名您的P12文件:apns-div-cert.p12否则您需要输入文件名。谢谢!