【问题标题】:Creating .pem file for APNS?为 APNS 创建 .pem 文件?
【发布时间】:2010-12-18 06:23:58
【问题描述】:

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

【问题讨论】:

  • 我可以使用 .p12 代替 .pem 吗?
  • .pem 的 FYI 定义:serverfault.com/a/21158/193377 PEM 本身不是证书,它只是一种编码数据的方式。 .... 粘贴到电子邮件正文中是安全的,因为它有锚线并且是 7 位干净的。

标签: iphone ssl-certificate apple-push-notifications payload


【解决方案1】:

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

使用钥匙串中的 aps_developer_identity.cer:

  1. 从本地 Mac 和登录钥匙串启动钥匙串访问,按证书类别过滤。您将看到一个名为“Apple Development Push Services”的可扩展选项
  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 设置此未加密密钥的文件权限。

【讨论】:

  • 我已按照上述步骤操作,现在它可以工作了。我已将证书和 php 脚本保存在我的本地 Web 服务器 (Xampp) 上。我能够获取设备令牌,并且在 php 脚本中使用它。 php 脚本能够连接和发送有效负载数据。但是我仍然无法获得推送通知。问题是什么 ?通知是否需要时间才能到达???
  • 在 Mavericks(10.9 的)钥匙串访问中,可以选择导出为 .pem!只需右键单击 Keychain Access 内的“Apple 开发/生产 iOS 推送服务证书并选择导出它。将文件格式更改为 .pem - 完成!也可作为导出选项使用:.p7b 和 .p12
  • .pem 对我来说是禁用的,优胜美地 beta7。我在创建 .pem 时遇到了一些问题,当我打开它时,它说是为了分发而不是 dev
  • .pem 没有为我禁用,但我无法另存为 p12。这是它的外观:i.imgur.com/U2M40dU.png
  • 对于使用 Keychain Access 应用程序的 macOS 10.14 Mojave,您可以选择将“Apple 推送服务:com.yourBundleIdentifier 证书”导出为文件格式“隐私增强邮件 (.pem)”并随时保存。
【解决方案2】:

开发阶段:

第 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。

如果执行了第 3 步,请运行:
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 的连接

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

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

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

【讨论】:

  • 谢谢,这是这里唯一对我有用的。
  • 保存在我珍贵的保险库中! :P 有史以来最棒的答案!
  • 你是上帝,这工作谢谢你。赞成票。这应该是答案,因为它深入介绍了如何逐步创建它
  • 当然这应该是公认的答案,因为@Rahul Sharma 的答案没有产生预期的结果,而这个答案是完美的。
  • 对我来说,在第 2 步中实际输入密码是必要的。保持为空会创建一个 PEM 文件,但键的实际值为空,导致后续步骤出错。
【解决方案3】:

步骤:

  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

【讨论】:

    【解决方案4】:

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

      openssl pkcs12 -in CertificateName.p12 -out CertificateName.pem -nodes
    

    【讨论】:

    • 生成 p12 后,这应该是答案。
    【解决方案5】:

    ->> Apple's own tutorial

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

    【讨论】:

    • 是的!只需按照简单的教程。只需一个简单的 openssl 命令。我不知道这是否重要,但我通过 SSH 进入连接到 APNS 的服务器来运行命令。
    • @tylerl,PEM 可以从任何机器生成 - 不必是它所在的服务器。
    • 我是否需要在部署 php 代码的服务器本身上运行此进程?或者我可以使用从我的 mac 生成的 .pem 文件吗?
    • 链接已于 2015 年 9 月断开
    【解决方案6】:

    注意:您必须在 App Store Connect 中拥有团队代理或管理员角色才能执行任何这些任务。如果您不是 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. 为应用 ID 启用推送通知
    4. 向 App ID 添加 SSL 证书
    5. 将证书转换为 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 会员资格或成为拥有该会员资格的团队的一员。

    1. 登录Apple Developer website
    2. 转到帐户,然后转到证书、标识符和配置文件

    创建应用 ID

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

    1. 转到标识符下的App IDs
    2. 使用包标识符搜索您的应用程序。它可能已经存在。
    3. 如果该应用没有现有的 App ID,请单击 (+) 按钮进行创建。
    4. App ID后缀部分选择Explicit App ID
    5. 输入应用的包标识符。
    6. 滚动到底部并启用推送通知
    7. 点击继续
    8. 在下一个屏幕上单击注册以完成创建 App ID。

    为 App ID 启用推送通知

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

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

    为 App ID 添加 SSL 证书

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

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

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

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

    为开发凭证创建钥匙串

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

    创建证书签名请求 (CSR)

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

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

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

    上传证书签名请求 (CSR)

    创建证书签名请求后,将其上传到 Apple 开发者中心。 Apple 将根据签名请求创建推送通知证书。

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

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

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

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

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

    将证书转换为 PEM 格式

    1. 在 Keychain Access 中选择之前创建的开发钥匙串。
    2. 我的证书中选择推送证书。它应该有一个私钥。 ![下载CER推送证书](keychain/import complete.png)
    3. 文件菜单中选择导出项目...
    4. 在打开的保存面板中,选择 Privacy Enhanced Mail (.pem) 作为文件格式。
    5. 保存文件

    【讨论】:

    • ??? 对于答案中的大多数屏幕截图。
    • 您是否缺少屏幕截图?请参阅答案末尾的“下载 CER 推送证书”
    • 我的钥匙串中同时拥有证书和私钥,但将其导出到.pem 文件的选项显示为灰色。对于我拥有的所有 3 个沙盒证书+密钥,我只能将其导出到 .p12.cer。我什至为此创建了一个新的 sanbox 证书,但没有奏效。有什么想法吗?
    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

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

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

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

      【讨论】:

        【解决方案9】:

        这就是我在 Windows 7 上安装 OpenSSL 后的做法(链接转到 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....等
        -----结束证书-----

        就是这样。

        【讨论】:

          【解决方案10】:

          如果您的钥匙串访问权限中已经有 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 否则你需要输入你的文件名而不是这个。谢谢!!

          【讨论】:

            【解决方案11】:

            我不记得创建.pem 文件所需的openssl 命令,所以我制作了这个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/&lt;username&gt;?)。创建文件后,执行chmod +x signpem.sh 使其可执行,然后就可以运行了:

            ~/signpem myCertificate.p12 myCertificate.pem

            myCertificate.pem 将被创建。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-03-12
              • 1970-01-01
              • 2020-02-13
              • 1970-01-01
              • 2016-01-21
              相关资源
              最近更新 更多