iOS 应用创建APNS 和 VOIP的pem证书流程
Posted Haley_Wong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 应用创建APNS 和 VOIP的pem证书流程相关的知识,希望对你有一定的参考价值。
早期的极光推送和友盟推送也是需要上传pem文件的,不过可能对接入SDK的开发者来说,要用一堆的命令生成pem文件还是有些太麻烦了,所以现在都改成了上传p12文件,输入密码的形式,这样极大的简化了开发人员使用SDK的流程。
因为服务器端是自己实现的APNS和VOIP,所以每次给客户部署服务器后,对应的App都需要生成新的pem证书给服务器端,这里记录下创建pem文件的流程。
1.创建CertificateSigningRequest.certSigningRequest证书
打开Mac中的钥匙串应用,【证书助理】–> 【从证书颁发机构请求证书…】。
接下来,填入【邮箱】,选择保存到【磁盘】即可。
这样,CertificateSigningRequest.certSigningRequest
文件就创建好了。
2.创建APNS用的cer证书
在开发者中心创建好应用的appId(也就是应用的bundleId)后,就可以创建apns证书了。
这里要分别创建Development和Production证书,需要选择先选择对应的appId,然后上传上一步中的CertificateSigningRequest.certSigningRequest
文件即可。
创建完成后,分别下载APNS的Development和Production证书,下载后的默认名称是aps_development.cer
和aps.cer
。
然后,分别双击aps_development.cer
和aps.cer
,这两个证书就被安装到钥匙串中了。
aps_development.cer
和aps.cer
证书,先不要删除,后面测试推送会用到。
3.生成服务器推送用的pem文件
3.1 导出p12文件
先将证书从钥匙串中导出p12文件。
如果最终开发证书和发布证书都要生成pem文件的话,那么开发证书和对应的key,以及发布证书和对应的key都要分别导出成p12文件。
我这里拿production证书举例,先导出证书(注意这里是选中证书):
导出的时候要设置密码,这里一般都随便设置一个(我这里设置的是123)。
然后,再导出key:
导出的时候要设置密码(我这里设置的是123)。
3.2 生成pem文件
可以先将导出的两个p12文件,放到一个文件夹下。然后,终端 中cd 到该目录下。
3.2.1 创建cert的pem文件
命令的格式如下:
openssl pkcs12 -clcerts -nokeys -out 证书.pem -in 证书.p12
这里的证书
就是导出来的证书的名称。
示例命令:
openssl pkcs12 -clcerts -nokeys -out apns_amac_cert.pem -in apns_amac_cert.p12
执行完后,会要求输入密码,输入(导出p12证书时的密码,我这里是123)密码回车即可。
创建成功的话,命令行会有如下返回:
MAC verified OK
3.2.2 创建key的pem文件
命令的格式如下:
openssl pkcs12 -nocerts -out 私钥.pem -in 私钥.p12
这里的私钥
就是导出的p12 key的名称。
我这里执行的命令:
openssl pkcs12 -nocerts -out apns_amac_key.pem -in apns_amac_key.p12
执行完后,会要求输入密码,输入(导出p12证书时的密码,我这里是123)密码回车。
创建成功的话,命令行会有如下返回:
MAC verified OK
接下来,还要再输入两次密码,这两次是为key 生成的pem 设置密码,且密码要保持一致。
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
注意:这两次是为key的pem文件设置保护密码,且保护密码必须是4位以上。
为key创建不需要密码的pem
服务端做推送时,无法输入密码,所以一般都是创建不需要密码的pem。
执行如下命令,可以为key生成一个去除密码的pem。
openssl rsa -in apns_amac_key.pem -out apns_amac_key_nopwd.pem
执行完上述命令时,依然需要输入密码,这里输入的就是上面key.pem的密码。
完成时,命令行会返回如下信息:
writing RSA key
3.2.3 合成服务器用的pem
执行命令将证书的pem 和key的pem合成到一起:
命令的格式如下:
cat 证书.pem 私钥.pem > 合成.pem
这里我执行的命令如下:
cat apns_amac_cert.pem apns_amac_key_nopwd.pem > apns_amac.pem
当然,如果想要创建的是带密码的pem,则使用带密码的key.pem即可。
比如:
cat apns_amac_cert.pem apns_amac_key.pem > apns_amac.pem
我们将合成后的pem给服务器端即可。
3.3 验证pem文件
可以使用如下命令来验证pem文件是否正确:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns_amac_cert.pem -key apns_amac_key.pem
如果服务器端返回如下信息,表明pem有效:
SSL-Session:
Protocol : TLSv1.2
Cipher : DES-CBC3-SHA
Session-ID:
Session-ID-ctx:
Master-Key: AF11044D4BEDCD4D75C36229C88A5475620326F661813FC56D11C62E08CDD43ABD681CC48AF16E04A5D252E9D4EC3869
Start Time: 1554188821
Timeout : 300 (sec)
Verify return code: 0 (ok
注意:其实苹果的APNS推送服务器有两个地址,
gateway.sandbox.push.apple.com:2195
是测试环境服务器;gateway.push.apple.com:2195
是生产环境服务器。不管用哪一个服务器都可以测试pem证书。
3.4 验证pem文件
如果想要自己在本地,给手机发送APNS推送等消息,测试cer证书是否正确的话,可以使用这个工具:
SmartPush(同事在原工具的基础上做了一些修改),原始的工具是GitHub这里:https://github.com/shaojiankui/SmartPush。
将证书(上面步骤2中下载的cer证书)和token设置好后,先【连接服务器】,再【推送】。
以上是关于iOS 应用创建APNS 和 VOIP的pem证书流程的主要内容,如果未能解决你的问题,请参考以下文章