不能发送使用Javapns / Javaapns SSL握手失败推送通知 [英] Cannot send push notifications using Javapns/Javaapns SSL handshake failure

查看:1439
本文介绍了不能发送使用Javapns / Javaapns SSL握手失败推送通知的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有推送通知的问题。我有一个是由团队成员创建了一个12页证书,我对设备的设备令牌被推到。我使用的是javapns库做推(也试过javaapns LIB有相同的结果),但我不断收到此错误:

I have an issue with push notifications. I have a p.12 certificate that was created by a team member and I have the device token for the device to be pushed to. I am using the javapns library to do the push (also tried the javaapns lib with same results) but I keep getting this error:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1720)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:954)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:632)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
at java.io.OutputStream.write(OutputStream.java:58)
at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:402)
at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:350)
at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:320)
at javapns.Push.sendPayload(Push.java:177)
at javapns.Push.combined(Push.java:100)
at PushTest.push(PushTest.java:43)
at PushTest.main(PushTest.java:25)

这就是code我使用来测试

and this is the code I am using to test

try {
                                List<PushedNotification> n = Push.combined(text, 20, null, file, "********", false, token);


            for (PushedNotification notification : n) {
                if (notification.isSuccessful()) {

                        System.out.println("Push notification sent successfully to: " +
                                                        notification.getDevice().getToken());

                } else {
                        String invalidToken = notification.getDevice().getToken();

                        Exception theProblem = notification.getException();
                        theProblem.printStackTrace();


                        ResponsePacket theErrorResponse = notification.getResponse();
                        if (theErrorResponse != null) {
                                System.out.println(theErrorResponse.getMessage());
                        }
                }
        }
                }
                catch (CommunicationException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (KeystoreException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

我阅读和其他几个职位,包括该证书导入密钥库cacerts中但进口也将失败的尝试的建议。我使用的是Windows机器上Eclipse开发。

I read and tried the suggestions from several of the other posts including importing the certificate into cacerts keystore but the import fails as well. I am developing using eclipse on a windows machine.

任何人都熟悉这个问题?我是新来使用SSL所以也许我做错事或者是它,我不能使用证书另一台计算机上生成的?

Anyone familiar with this issue? I am new to using ssl so perhaps I'm doing something wrong or is it that I cannot use a certificate generated on another machine?

推荐答案

我是一个新的iOS开发人员,我收到了同样的问题。

I am a new iOS developer and I had the same issue before.

我终于发现问题是由于 P12证书
我们不应该用私钥P12文件,而不是我们应该生成你的私有密钥的P12和Apple的证书下载。

I finally found that the problem was due to the p12 certificate. We should not use the private key p12 file, instead we should generate a p12 from your private key and the cert download from Apple.

请执行以下命令的OpenSSL以获得正确的P12文件:

Please execute the following OpenSSL command to get the correct p12 file:

developer_identity.cer <= download from Apple
mykey.p12 <= Your private key

openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM
openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem
openssl pkcs12 -export -inkey mykey.pem -in developer_identity.pem -out iphone_dev.p12

在这之后,你应该使用 iphone_dev.p12 与苹果服务器进行通信。

After that, you should use iphone_dev.p12 to communicate with apple server.

这篇关于不能发送使用Javapns / Javaapns SSL握手失败推送通知的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆