我正在为苹果开发Java的Push Notification服务,为此我使用了JavaPNS 2.2。我已使用site处的可用教程在Apple中创建证书并成功运行演示(在PHP中)。 (我也已将证书转换为.p12,.pem文件)。

但是,当我尝试在测试类中的Java中运行简单的推送通知时(如JavaPNS教程中所指定),

public class PushTest {

public static void main(String[] args) {
     try {
         List<PushedNotification> notifications = Push.alert("Hello World!", "<filename>.p12", "<password>", true, "<devicetoken>");
         System.out.println("List of Device: "+notifications);

         List<Device> inactiveDevices = Push.feedback("<filename>.p12", "<password>", true);
    } catch (CommunicationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (KeystoreException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}


我正进入(状态,

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(Unknown Source)
    at com.sun.net.ssl.internal.ssl.AppOutputStream.write(Unknown Source)
    at java.io.OutputStream.write(Unknown Source)
    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.test(Push.java:132)
    at javapns.test.NotificationTest.pushTest(NotificationTest.java:83)
    at javapns.test.NotificationTest.main(NotificationTest.java:46)


在Eclipse中调试JavaPNS代码后,我知道错误是由于

java.io.EOFException: SSL peer shut down incorrectly


现在我不明白问题出在哪里,因为我的证书(带有.PEM扩展名)可以在PHP示例中正常工作。

如果它在PHP中而不是在Java中工作,则我怀疑它的证书有问题,而JavaPNS网站也未指定天气,我必须通过keytool导入生成的证书。

谁能帮我解决我的问题?
仅供参考:我的系统配置,
操作系统:Win 7
的Java:jdk1.6.0_05
JavaPNS:2.2

最佳答案

终于我找到了问题的答案,

其证书。事实是,有2个证书具有相同的URL(com.xxx.xxx),并且因此引起混淆。

我删除了该设备未使用的那个,并从该设备和Bingo中使用的那个创建了一个新的.p12,它可以正常工作。

10-08 08:53