187

如何为 APN 有效负载数据创建要存储在托管服务器中的 .pem 文件?

4

11 回答 11

377

这是我所做的,来自:blog.boxedice.com和“iPhone 高级项目”第 10 章,作者是 Joe Pezzillo。

使用钥匙串中的 aps_developer_identity.cer:

  1. 从本地 Mac 和登录钥匙串启动钥匙串访问,按证书类别过滤。您将看到一个名为“Apple Development Push Services”的可扩展选项</li>
  2. 右击“Apple Development Push Services”>导出“Apple Development Push Services ID123”。将此作为apns-dev-cert.p12文件保存在您可以访问的地方。无需输入密码。
  3. 下一个命令在 Mac 的终端中为 PEM 格式(隐私增强邮件安全证书)生成证书:

    openssl pkcs12 -in apns-dev-cert.p12 -out apns-dev-cert.pem -nodes -clcerts
    

在服务器上使用 chmod 400 设置此未加密密钥的文件权限。

于 2009-11-19T12:01:48.970 回答
245

发展阶段:

第 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 以获得应用程序开发阶段推送通知所需的 Development .pem。

如果执行了第 3 步,请运行:
cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem

如果未执行第 3 步,请运行:
cat apns-dev-cert.pem apns-dev-key.pem > apns-dev.pem

第 5 步:检查证书有效性和与 APNS 的连接

如果执行了第 3 步,请运行:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev-cert.pem -key apns-dev-key-noenc.pem

如果未执行第 3 步,请运行:
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。

如果执行了第 3 步,请运行:
cat apns-pro-cert.pem apns-pro-key-noenc.pem > apns-pro.pem

如果未执行第 3 步,请运行:
cat apns-pro-cert.pem apns-pro-key.pem > apns-pro.pem

第 5 步:检查证书有效性和与 APNS 的连接。

如果执行了第 3 步,请运行:
openssl s_client -connect gateway.push.apple.com:2195 -cert apns-pro-cert.pem -key apns-pro-key-noenc.pem

如果未执行第 3 步,请运行:
openssl s_client -connect gateway.push.apple.com:2195 -cert apns-pro-cert.pem -key apns-pro-key.pem

于 2015-01-14T12:02:20.113 回答
65

脚步:

  1. 使用钥匙串访问创建 CSR
  2. 使用密钥链访问使用私钥创建 P12
  3. APNS 应用 ID 和证书

这为您提供了三个文件:

  • 企业社会责任
  • 私钥作为 p12 文件 ( PushChatKey.p12)
  • SSL证书,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

于 2014-08-18T21:08:52.820 回答
24

启动终端应用程序并在提示后输入以下命令

  openssl pkcs12 -in CertificateName.p12 -out CertificateName.pem -nodes
于 2013-09-19T03:04:28.240 回答
9

->> Apple 自己的教程<<- 是我遇到的唯一有效的指令集。这很简单,我可以确认它在 linux php 服务器和 windows php 服务器上都能很好地工作。

您可以在页面底部找到他们的 5 步 pem 创建过程。

于 2013-04-03T00:57:16.760 回答
7

注意:您必须在 App Store Connect 中拥有 Team Agent 或 Admin 角色才能执行任何这些任务。如果您不是 App Store Connect 中团队的一员,这可能不会影响您。

向 iOS 应用程序发送推送通知需要创建加密密钥。在过去,这是一个使用 SSL 密钥和证书的繁琐过程。每个 SSL 证书都特定于单个 iOS 应用程序。2016 年,Apple 推出了一种更可靠、更易于使用的新身份验证密钥机制。与 iOS 应用程序相比,新的身份验证密钥更灵活、更易于维护和应用。

尽管自引入身份验证密钥以来已经有好几年了,但并非每个服务都支持它们。FireBase 和 Amazon Pinpoint 支持身份验证密钥。Amazon SNS、Urban Airship、Twilio 和 LeanPlum 没有。许多开源软件包尚不支持身份验证密钥。

创建所需的 SSL 证书并将其导出为包含公钥和私钥的 PEM 文件:

  1. 导航到证书、标识符和配置文件
  2. 创建或编辑您的应用 ID。
  3. 为 App ID 启用推送通知
  4. 将 SSL 证书添加到 App ID
  5. 将证书转换为 PEM 格式

如果您已经在 Apple Developer Center 网站中为应用设置了 SSL 证书,您可以跳过将证书转换为 PEM 格式。请记住,如果您还没有在创建上传到 Apple 的签名请求的 Mac 上生成的私钥,您将遇到问题。

继续阅读以了解如何避免丢失该私钥。

导航到证书、标识符和配置文件

Xcode 不控制推送通知的证书或密钥。要为应用创建密钥并启用推送通知,您必须访问 Apple Developer Center 网站。您帐户的证书、标识符和配置文件部分控制应用程序 ID 和证书。

要访问证书和个人资料,您必须拥有付费的 Apple Developer Program 会员资格或成为拥有该会员资格的团队的一员。

  1. 登录Apple 开发者网站 在此处输入图像描述
  2. 转到Account,然后是Certificates, Identifiers & Profiles 在此处输入图像描述

创建应用 ID

使用推送通知的应用程序不能使用通配符应用程序 ID 或配置文件。每个应用程序都要求您在 Apple Developer Center 门户中设置应用程序 ID 记录以启用推送通知。

  1. 转到标识符下的应用程序 ID
  2. 使用捆绑标识符搜索您的应用。它可能已经存在。
  3. 如果应用程序没有现有的应用程序 ID,请单击 (+) 按钮来创建它。
  4. App ID Suffix 部分 中选择显式 App ID 。在此处输入图像描述
  5. 输入应用程序的包标识符。
  6. 滚动到底部并启用推送通知在此处输入图像描述
  7. 单击继续
  8. 在下一个屏幕上单击注册以完成创建 App ID。 在此处输入图像描述

为 App ID 启用推送通知

  1. 转到标识符下的应用程序 ID
  2. 单击 App ID 以查看详细信息并滚动到底部。 在此处输入图像描述
  3. 单击编辑 在此处输入图像描述
  4. 在 App ID 设置屏幕中向下滚动到推送通知 在此处输入图像描述
  5. 选中复选框以启用推送通知。 在此处输入图像描述

为推送通知创建 SSL 证书是一个包含多个任务的过程。每个任务都有几个步骤。所有这些都是以 P12 或 PEM 格式导出密钥所必需的。在继续之前查看这些步骤。

将 SSL 证书添加到 App ID

  1. 在开发 SSL 证书下单击创建证书。您稍后也需要为生产执行此操作。
  2. Apple 将要求您创建证书签名请求 在此处输入图像描述

要创建证书,您需要在 Mac 上提出证书签名请求 (CSR) 并将其上传到 Apple。

稍后,如果您需要将此证书导出为 pkcs12(又名 p12)文件,您将需要使用同一 Mac中的钥匙串。创建签名请求时,Keychain Access 会在默认钥匙串中生成一组密钥。这些密钥对于使用 Apple 将根据签名请求创建的证书是必需的。

拥有一个专门用于开发凭据的单独钥匙串是一种很好的做法。如果您这样做,请确保在使用证书助手之前将此钥匙串设置为默认值。

为开发凭证创建钥匙串

  1. 在 Mac 上打开钥匙串访问
  2. 文件菜单中选择新建钥匙串...
  3. 为您的钥匙串起一个描述性名称,例如“共享开发”或您的应用程序的名称

创建证书签名请求 (CSR)

创建证书签名请求时,证书助手会在默认钥匙串中生成两个加密密钥。将开发钥匙串设为默认非常重要,这样钥匙就在正确的钥匙串中。

  1. 在 Mac 上打开钥匙串访问。
  2. 按住 Control 键单击钥匙串列表中的开发钥匙串
  3. 选择使钥匙串“共享开发”默认 在此处输入图像描述
  4. Keychain Access菜单中选择Certificate Assistant,然后从子菜单中 Request a Certificate From a Certificate Authority...。在此处输入图像描述
  5. 当 Certificate Assistant 出现时,选中Saved To Disk在此处输入图像描述
  6. 在“用户电子邮件地址”字段中输入与您的 Apple Developer Program 会员资格相关联的电子邮件地址。
  7. 在Common Name字段中输入密钥的名称。使用应用程序的捆绑 ID 作为通用名称的一部分是个好主意。这可以很容易地分辨出哪些证书和密钥属于哪个应用程序。
  8. 单击继续。证书助理将提示将签名请求保存到文件中。
  9. 在钥匙串访问中,再次将“登录”钥匙串设为默认值。

创建签名请求会生成一对密钥。在上传签名请求之前,请验证开发钥匙串是否具有密钥。它们的名称将与签名请求中使用的通用名称相同。

在此处输入图像描述

上传证书签名请求 (CSR)

创建证书签名请求后,将其上传到 Apple Developer Center。Apple 将根据签名请求创建推送通知证书。

  1. 上传证书签名请求
  2. 下载 Apple 从证书签名请求创建的证书 在此处输入图像描述
  3. 在钥匙串访问中,从钥匙串列表中选择开发钥匙串
  4. 文件菜单中选择导入项目... 在此处输入图像描述
  5. 导入从 Apple 下载的证书文件

您的开发钥匙串现在应该在钥匙串访问中的我的证书下显示带有私钥的推送证书:

在此处输入图像描述

此时应备份开发钥匙串。许多团队将推送证书保存在安全的 USB 驱动器上,致力于内部版本控制或使用 Time Machine 等备份解决方案。开发钥匙串可以在不同的团队成员之间共享,因为它不包含任何个人代码签名凭据。

钥匙串文件位于~/Library/Keychains.

一些第三方推送服务需要隐私增强邮件 (PEM) 格式的证书,而另一些则需要公钥加密标准 #12(PKCS12 或 P12)。从 Apple 下载的证书可用于导出这些格式的证书 - 但前提是您保留了私钥。

将证书转换为 PEM 格式

  1. 在 Keychain Access 中选择之前创建的开发钥匙串。
  2. 在My Certificates中选择推送证书。它应该有一个私钥。![下载CER推送证书](keychain/import complete.png)
  3. 文件菜单中选择导出项目... 在此处输入图像描述
  4. 在打开的保存面板中,选择隐私增强邮件 (.pem)作为文件格式。
  5. 保存文件
于 2018-08-28T00:56:22.823 回答
5

你可以看看这里。我有用图像描述的详细过程,从创建证书到应用程序密钥到配置文件,再到最终的 pem。 http://docs.moengage.com/docs/apns-certificate-pem-file

于 2015-08-04T10:13:00.813 回答
3

我会建议一个更简单的解决方案。只需使用Certifire
Certifire是一个 macOS 应用程序,只需单击几秒钟即可生成 Apple 推送通知证书。

以下是步骤:
1. 下载应用程序。
2. 使用您的 Apple Developer Account 凭据登录。
3. 选择 App-ID
4. 点击“生成”按钮
5. 大功告成!

您将获得 .pem 格式和 .p12 格式的 APN 证书。更重要的是,您还将获得 .pem 和 .p12 的组合(密钥+证书)!
更重要的是,您还将获得所有这些证书的无密码版本!

在此处输入图像描述

在此处输入图像描述

于 2017-11-29T11:36:07.480 回答
2

这就是我在 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

这将创建一个文件,然后您也需要添加您的私钥。

-----
开始私钥-- MIIEuwIBADANBgkqhk....等
MIIEuwIBADANBgkqhk....等
MIIEuwIBADANBgkqhk....等
MIIEuwIBADANBgkqhk....等
-----结束私钥----- -----开始 证书
-----
AwiBAgwIBADAwIBADA....等
AwiBAgwIBADAwIBADA..

就是这样。

于 2013-09-29T05:44:29.120 回答
2

如果您的钥匙串访问权限中已经有 apns p12 文件,则有一种创建 .Pem 文件的最简单方法。

打开终端并输入以下命令:

对于开发 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 否则你需要输入你的文件名而不是这个。谢谢!!

于 2017-12-28T13:11:59.597 回答
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>?) 中。创建文件后,执行 achmod +x signpem.sh使其可执行,然后您可以运行:

~/signpem myCertificate.p12 myCertificate.pem

并将myCertificate.pem被创建。

于 2017-06-13T20:23:09.460 回答