如何创建一个.pem文件以存储在托管服务器中用于APN有效负载数据?
如何创建一个.pem文件以存储在托管服务器中用于APN有效负载数据?
Answers:
这是我做的,来自:Joe Pezzillo撰写的blog.boxedice.com和“ iPhone Advanced Projects”第10章。
在钥匙串中使用aps_developer_identity.cer:
apns-dev-cert.p12
文件另存为可以访问的位置。无需输入密码。下一条命令在Mac的Terminal中以PEM格式生成证书(“隐私增强邮件安全证书”):
openssl pkcs12 -in apns-dev-cert.p12 -out apns-dev-cert.pem -nodes -clcerts
在服务器上,使用chmod 400设置此未加密密钥的文件许可权。
开发阶段:
步骤1: 从证书.p12创建证书.pem
openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12
步骤2:从密钥.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开发阶段中的推送通知所需的Development .pem。
如果执行了第三步,请运行:
cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem
如果未执行第三步,请运行:
cat apns-dev-cert.pem apns-dev-key.pem > apns-dev.pem
步骤5:检查证书有效性和与APNS的连接
如果执行了第三步,请运行:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev-cert.pem -key apns-dev-key-noenc.pem
如果未执行第三步,请运行:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev-cert.pem -key apns-dev-key.pem
生产阶段:
步骤1: 从证书.p12创建证书.pem
openssl pkcs12 -clcerts -nokeys -out apns-pro-cert.pem -in apns-pro-cert.p12
步骤2:从密钥.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,以获取App生产阶段中的推送通知所需的Production .pem。
如果执行了第三步,请运行:
cat apns-pro-cert.pem apns-pro-key-noenc.pem > apns-pro.pem
如果未执行第三步,请运行:
cat apns-pro-cert.pem apns-pro-key.pem > apns-pro.pem
步骤5:检查证书有效性和与APNS的连接。
如果执行了第三步,请运行:
openssl s_client -connect gateway.push.apple.com:2195 -cert apns-pro-cert.pem -key apns-pro-key-noenc.pem
如果未执行第三步,请运行:
openssl s_client -connect gateway.push.apple.com:2195 -cert apns-pro-cert.pem -key apns-pro-key.pem
脚步:
这为您提供了三个文件:
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
->> 苹果自己的教程 <<-是我遇到的唯一可行的指令集。很简单,我可以确认它在linux php服务器和Windows php服务器上都能出色地工作。
您可以在页面底部找到其5个步骤的pem创建过程。
你可以在这里看看。我使用图像描述了详细的过程,从创建证书到应用程序密钥再到供应配置文件,再到pem。 http://docs.moengage.com/docs/apns-certificate-pem-file
我建议一个更简单的解决方案。只需使用Certifire即可。
Certifire是一个macOS应用程序,只需几秒钟即可单击一次生成Apple Push Notification Certificates。
步骤如下:
1.下载应用程序。
2.使用您的Apple开发者帐户凭据登录。
3.选择应用程序
ID。4.单击“生成”按钮
。5.完成!
您将获得.pem格式以及.p12格式的APN证书。甚至,您还将获得.pem和.p12的组合(密钥+证书)!
此外,您还将获得所有这些证书的无密码版本!
注意:您必须在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格式。请记住,如果您还没有在创建用于上传到Apple的签名请求的Mac上生成的私钥,则会遇到问题。
继续阅读以了解如何避免丢失对该私钥的跟踪。
Xcode不控制用于推送通知的证书或密钥。要创建按键并为应用程序启用推送通知,您必须访问Apple Developer Center网站。帐户的“证书,标识符和配置文件”部分控制应用程序ID和证书。
要访问证书和个人资料,您必须具有付费的Apple Developer Program会员资格或成为该团队的成员。
使用推送通知的应用程序不能使用通配符应用程序ID或供应配置文件。每个应用程序都要求您在Apple Developer Center门户中设置一个应用程序ID记录,以启用推送通知。
为推送通知创建SSL证书是一个完成多个任务的过程。每个任务都有几个步骤。所有这些都是导出P12或PEM格式的密钥所必需的。在继续之前,请查看步骤。
要创建证书,您需要在Mac上发出证书签名请求(CSR),并将其上传到Apple。
以后,如果您需要将此证书导出为pkcs12(aka p12)文件,则需要使用同一Mac上的钥匙串。创建签名请求后,“钥匙串访问”会在默认钥匙串中生成一组钥匙。这些密钥对于使用Apple将根据签名请求创建的证书是必需的。
最好有一个单独的钥匙串,专门用于开发的凭据。如果这样做,请在使用证书助手之前确保将此钥匙串设置为默认值。
创建证书签名请求时,证书助手会在默认钥匙串中生成两个加密密钥。重要的是将开发钥匙串设为默认钥匙串,以使钥匙位于正确的钥匙串中。
创建签名请求会生成一对密钥。在上传签名请求之前,请验证开发钥匙串是否具有密钥。它们的名称将与签名请求中使用的通用名称相同。
创建Certicate签名请求后,将其上传到Apple开发人员中心。Apple将根据签名请求创建推送通知证书。
您的开发钥匙串现在应该在“钥匙串访问”中的“ 我的证书”下显示带有私钥的推送证书:
此时,应该备份开发钥匙串。许多团队将推送证书保存在安全的USB驱动器上,致力于内部版本控制或使用Time Machine等备份解决方案。开发钥匙串可以在不同的团队成员之间共享,因为它不包含任何个人代码签名凭据。
钥匙串文件位于中
~/Library/Keychains
。
一些第三方推送服务要求使用“隐私增强邮件”(PEM)格式的证书,而其他一些则要求使用“公共密钥密码学标准#12”(PKCS12或P12)。从Apple下载的证书可以用于导出这些格式的证书-但前提是您保留私钥。
这是我在Windows 7上安装OpenSSL之后的方法(链接转到Win32安装程序,选择最新版本,而不是简易版本)。
使用这种方法,您只需.cer
要从Apple下载的文件即可。
c:\OpenSSL-Win32\bin\openssl.exe x509 -in aps_development.cer -inform DER -out developer_identity.pem -outform PEM
这将创建一个文件,然后您还需要添加私钥。
----- BEGIN PRIVATE KEY -----
MIIEuwIBADANBgkqhk ....等
MIIEuwIBADANBgkqhk ....等
MIIEuwIBADANBgkqhk ....等
MIIEuwIBADANBgkqhk ....等
----- END PRIVATE KEY -----
----- BEGIN证书-----
AwIBAgwIBADAwIBADA .... etc
AwIBAgwIBADAwIBADA .... etc
AwIBAgwIBADAwIBADA .... etc
-----结束证书-----
而已。
我从不记得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>
?)中。创建文件后,执行a chmod +x signpem.sh
使它可执行,然后可以运行:
~/signpem myCertificate.p12 myCertificate.pem
而myCertificate.pem
将被创建。