三味猪屋

关于如何验证制作的推送证书可用

iOS有时候测试或者线上收不到推送消息,大家就会首先将问题抛给iOS开发人员,但是推送消息收不到有很多种原因,只要制作的证书没有问题,跟iOS开发人员没有毛线关系啊。
那么如何去证明我们的证书制作的是没有问题的呢?
有两个办法可以来验证:
方式一、写一个模拟服务端的推送程序,模拟推送一条消息。但是这种办法有个弊端,当苹果的APNs挂了、延迟、国内被墙等时,也是无法收到推送消息,所以无法判断是否是推送证书有问题。
我们也提供了一个demo,如下图:

方式二、通过openssl命令验证
1、导出.cer证书文件
keychain中导出推送证书时要选中证书文件,不要展开private key。注意导出为.cer文件,命名为:aps_development.cer。


2、导出.p12私钥文件
keychain中选中推送证书的私钥文件,注意导出为.p12文件,命名为:aps_push.p12

3、转换为.pem文件
上面两个文件都要先转换为.pem文件,最终要将转换后的两个.pem文件合并为一个.pem文件。
a、将aps_development.cer转换为.pem文件:

1
openssl x509 -in aps_development.cer -inform der -out aps_development.pem

b、将aps_push.p12转换为.pem文件:

1
openssl pkcs12 -nocerts -out aps_push.pem -in aps_push.p12

这里首先需要我们输入在第二步导出私钥文件中定义的密码。其次,还需要为新生成的pem文件设置一个密码。此密码为上传PUSH平台所用的密码!所以,推荐所有密码一致,以防混淆。
4、合并.pem文件
合并上一步得到的两个文件:

1
cat aps_development.pem aps_push.pem > push.pem

5、测试
为了测试证书是否工作,执行下面的命令:

1
telnet gateway.sandbox.push.apple.com 2195

它将尝试发送一个规则的,不加密的连接到APNS服务。如果看到下面返回,即能够到达APNS。按下Ctrl+C关闭连接。

如出现上图所示则表明是APNs是可访问的。
测试证书是否正确:

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

首先会要求你输入密码,即私钥那一步生成的密码。


如出现上图所示则表明证书有效,连接成功。