SSL证书错误:certificate_unknown

时间:2011-10-20 07:47:17

标签: iphone push-notification ssl-certificate apple-push-notifications provider

在为开发创建推送通知提供程序时,我们面临以下错误: 我想知道证书有什么问题,因为我启用了推送通知然后创建了证书,但我收到了certificate_unknown错误?

main, RECV TLSv1 ALERT:  fatal, certificate_unknown
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
Error pushing notification(s):
Invalid certificate chain (Received fatal alert: certificate_unknown)!  Verify that the keystore you provided was produced according to specs...
      at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:359)
      at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:301)
      at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:258)
      at javapns.Push.payload(Push.java:122)
      at javapns.Push.alert(Push.java:36)
      at com.applicationname.pns.PushNotification.main(PushNotification.java:31)

//我用于推送通知的代码

/**
 * 
 */
package com.applicationname.pns;

import org.json.JSONException;

import javapns.Push;
import javapns.devices.Device;
import javapns.notification.Payload;
import javapns.notification.PushNotificationManager;
import javapns.notification.PushNotificationPayload;


public class PushNotification
{
    private static final String HOST = "gateway.sandbox.push.apple.com";
    private static final int PORT = 2195;
    private static final int BADGE = 66;
    private static String iPhoneId = "5696ee2fa44c61fd21a7987d2b1bcf57faa1603e63cb57ff204b158fb90d28a3";
    private static String certificate = "D:/./trunk/Development/JavaPNS/src/com/applicationname/pns/privateKey.p12";
    private static String passwd = "password@1234";

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        Push.alert("Hello World!", certificate, passwd, false,iPhoneId);

        PushNotificationPayload payLoad = new PushNotificationPayload();

        try
        {
            payLoad.addAlert("Hello World!");
            payLoad.addBadge(10);
        }
        catch (JSONException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


}

3 个答案:

答案 0 :(得分:2)

尝试加载公钥代替私钥

private static String certificate = "D:/./trunk/Development/JavaPNS/src/com/applicationname/pns/privateKey.p12";

私钥由服务器端的SSL套接字加载。

答案 1 :(得分:1)

您应该确保遵循procedure准备在官方JavaPNS网站上记录的证书。遵循此程序的开发人员将获得积极的结果。

答案 2 :(得分:0)

我在jdk 1.7中解决了这个问题并使用了p12,只是在更改p12文件的passwd长度大于或等于6之后。否则,会发生以下错误: [[1]未传输到令牌595d8..725bf javapns.communication.exceptions.InvalidCertificateChainException:证书链无效(收到致命警报:certificate_unknown)!验证您提供的密钥库是否根据规范...]

生成