使用Java语言实现iOS推送时常常出现以下错误信息:
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
出现这种错误的原因很多,主要有以下几个方面:
1. 网络连接错误
在命令行中输入以下命令,验证与APNs的通信是否成功
telnet gateway.sandbox.push.apple.com 2195
openssl s_client -connect gateway.sandbox.push.apple.com:2195
-cert PushServiceCert.pem -key PushServiceKey.pem
.pem文件的生成详见:iOS Push Notification配置
2. 引用.p12文件错误
在Java实现中,需要使用一个.p12的验证文件,但容易引起混谣的是,该.p12文件并不是直接从keychain中导出的.p12文件,还需要预先处理。
处理方式详见上一步中引用的文章。
3. 授权文件不对应
如果上述两种办法还没能解决,有可能是.p12和.cer文件不对应,可以考虑删掉现有的key和cert,重新申请。
参考资料:
http://stackoverflow.com/a/12659502/2177332
http://blog.csdn.net/bryster/article/details/42560087