SSL证书错误:certificate_unknown

我想创build推送通知服务器,并在服务器上安装SSL证书和.p12文件时,我们正面临着以下错误:我想知道什么是ssl证书的错误,因为我得到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(); } } } 

将私钥作为客户端请求加载到SSL套接字是不常见的。 我个人认为你应该加载公钥。 私钥由服务器端的SSL套接字加载。 你需要私钥的唯一原因是作为一个服务器,并从另一端接受连接,但你似乎没有这样做。

这可能解释“格式错误的证书”消息。

在参照:

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

我认为这个错误是不言而喻的,你的证书链实际上并没有正确地validation你的证书。 也许你错过了一个或多个需要validation你最终的最终证书的链接证书?

无论如何,这个错误给了你一个非常明确的指示:“确认你提供的密钥库是根据规范生成的……”。

在这个网站上没有任何人可以添加除了阅读你的错误消息说什么,并做到这一点 – 我们都没有水晶球,也不能奇迹般地解决你的问题。

我没有看到在发布一个问题的地方,除了一个非常明确的错误信息,告诉你到底该怎么做,没有更多的信息。 我们所能说的只是“做错误信息所说的!”