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
我试过在名称中没有< >
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 openssl pkcs12 -in devKey.p12 -out MyPushApp.pem -nodes -clcerts
生成.pem 文件。我不知道 -clcerts 的作用,它是生成 .pem 的正确方法吗?
我完成了 tut,它工作正常,我在控制台中看到了欢迎消息,所以它必须准备好了:)。以上是关于iOS 移动推送网关设置 - openssl 命令实现的主要内容,如果未能解决你的问题,请参考以下文章