iOS 移动推送网关设置 - openssl 命令实现

Posted

技术标签:

【中文标题】iOS 移动推送网关设置 - openssl 命令实现【英文标题】:iOS Mobile Push Gateway setup - openssl command implementation 【发布时间】:2014-07-09 21:54:07 【问题描述】:

我想在我的应用程序处于后台时使用 Mobile Push Gateway 发送推送消息。我遵循了这个tutorial 并且几乎完成了,但我无法将.p12 文件转换为.pem。我可以成功导出 .p12 证书,但无法完成接下来的步骤,也许我错过了一些东西,但无法弄清楚。

很明显,我需要像这样在终端中运行 openssl 命令:

openssl pkcs12 -in <EXPORTED_CERT_NAME.p12> -out <PEM_CERT_NAME.pem> -nodes

这是我的版本:

openssl pkcs12 -in <cert.p12> -out <newCert.pem> -nodes

cert.p12 是从钥匙串导出的证书,newCert.pem 是新文件的名称。我已将其粘贴到终端并按 Enter 键,但没有任何反应。刚刚收到这条消息cert2.pem: No such file or directory

当我尝试使用此命令检查证书时:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert server_certificates_bundle_sandbox.pem -key server_certificates_bundle_sandbox.pem

得到这个错误:

Error opening client certificate private key file server_certificates_bundle_sandbox.pem
2668:error:02001002:system library:fopen:No such file or directory:/SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/bio/bss_file.c:356:fopen('server_certificates_bundle_sandbox.pem','r')
2668:error:20074002:BIO routines:FILE_CTRL:system lib:/SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/bio/bss_file.c:358:
unable to load client certificate private key file

我做错了什么?是我的 openssl 代码有问题还是我需要在终端中做一些不同的事情?

更新 3

一个版本

cd /tmp
openssl pkcs12 -in devKey.p12 -out newDevCert.pem -nodes
  openssl pkcs12 -in devKey.p12 -out newDevCert.pem -nodes
Error opening input file devKey.p12
devKey.p12: No such file or directory

b,版本

在这种情况下,我没有机会输入密码,因为错误在 openssl 命令之后立即显示。

cd documents
openssl pkcs12 -in devKey.p12 -out samplePem.pem -nodes
Enter Import Password:
Mac verify error: invalid password?

更新 2

我试过在名称中没有&lt; &gt;

 openssl pkcs12 -in developerTest.p12 -out newDevCert.pem -node 

好像发生了什么事

openssl pkcs12 -in developerTest.p12 -out newDevCert.pem -node
Usage: pkcs12 [options]
where options are
-export       output PKCS12 file
-chain        add certificate chain
-inkey file   private key if not infile
-certfile f   add all certs in f
-CApath arg   - PEM format directory of CA's
-CAfile arg   - PEM format file of CA's
-name "name"  use name as friendly name
-caname "nm"  use nm as CA friendly name (can be used more than once).
-in  infile   input filename
-out outfile  output filename
....
-keysig       set MS key signature type
-password p   set import/export password source
-passin p     input file pass phrase source
-passout p    output file pass phrase source
-engine e     use engine e, possibly a hardware device.
-rand file:file:...
              load the file (or the files in the directory) into
              the random number generator
-CSP name     Microsoft CSP name
-LMK          Add local machine keyset attribute to private key

但是当我尝试验证它时仍然出现错误:

Error opening client certificate private key file newDevCert.pem
850:error:02001002:system library:fopen:No such file or directory:/SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/bio/bss_file.c:356:fopen('newDevCert.pem','r')
850:error:20074002:BIO routines:FILE_CTRL:system lib:/SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/bio/bss_file.c:358:
unable to load client certificate private key file

更新(较早)

我已导出新的.p12 证书并再次尝试。如果我只是打开终端并运行此代码:

 openssl pkcs12 -in <developerTest.p12> -out <newDevCert.pem> -node

遇到这个错误

-bash: developerTest.p12: 没有这样的文件或目录

我将developerTest.p12 保存到我的Documents 文件夹中,所以当我尝试时

 cd documents
 openssl pkcs12 -in <developerTest.p12> -out <newDevCert.pem> -node

我得到一个不同的错误:

 -bash: newDevCert.pem: No such file or directory

在这种情况下,我认为答案更接近一点,当我在 Documents 文件夹中运行命令时,它会找到导出的 .p12,但是仍然有问题。

确定PEM_CERT_NAME 可以是任何东西吗?

/tmp 版本:

cd /tmp
openssl pkcs12 -in <developerTest.p12> -out <newDevCert.pem> -node

-bash: developerTest.p12: No such file or directory

【问题讨论】:

【参考方案1】:

    -node 应该是-nodes(这意味着“没有des”)

    切勿在文件名中使用大于/小于()。在 Unix 中具有特殊含义(重定向)。在指令中使用时,它们的基本意思是“将 之间的内容替换为您自己的值,并省略 ”。

例如,这应该可以正常工作:

cd /tmp
openssl pkcs12 -in developerTest.p12 -out newDevCert.pem -nodes

如果上述方法有效,请告诉我。

【讨论】:

ls: server_certificates_bundle_sandbox.pem: No such file or directory 我认为没有创建 .pem 文件。 好的,所以验证“openssl pkcs12 -in -out -nodes”是否正在创建 PEM,如果没有,请告诉我们它在你之后说了什么运行该命令。也可以在 /tmp 中尝试,以确保它不是写访问权限问题。 @vv88 我想我知道这里发生了什么。两期,一新一旧。 我想我明白了。我可以用这个版本openssl pkcs12 -in devKey.p12 -out MyPushApp.pem -nodes -clcerts 生成.pem 文件。我不知道 -clcerts 的作用,它是生成 .pem 的正确方法吗? 我完成了 tut,它工作正常,我在控制台中看到了欢迎消息,所以它必须准备好了:)。

以上是关于iOS 移动推送网关设置 - openssl 命令实现的主要内容,如果未能解决你的问题,请参考以下文章

使用adb 将文件推送至手机系统分区

iOS百度推送上传pem证书提示‘证书无效’

iOS使用openSSL加密应该怎么做

如何在 android 和 ios 收到的推送通知上设置徽章?

想知道安卓、iOS消息推送用哪家比较好?

远程推送相关