Я хочу создать сервер push-уведомлений, и при установке на сервере 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 на стороне сервера. Единственная причина, по которой вам нужен закрытый ключ, заключается в том, что вы ведете себя как сервер и принимаете соединения с другого конца, но, похоже, вы этого не делаете.
Это может объяснить сообщение «сертификат в неправильном формате».
В отношении:
источник
Я думаю, что ошибка довольно очевидна, ваша цепочка сертификатов фактически не проверяет ваш сертификат должным образом. Возможно, вам не хватает одного или нескольких сертификатов цепочки, необходимых для проверки вашего окончательного сертификата?
Что бы это ни было, ошибка дает вам очень четкую инструкцию: «Убедитесь, что предоставленное вами хранилище ключей было создано в соответствии со спецификациями ...».
На этом сайте никто ничего не может добавить, кроме как прочитать то, что говорит ваше сообщение об ошибке, и сделать это - ни у кого из нас нет хрустальных шаров, и мы не можем волшебным образом решить вашу проблему.
Я не вижу смысла в публикации вопроса, в котором вы не предоставляете нам никакой дополнительной информации, кроме ОЧЕНЬ четкого сообщения об ошибке, которое точно говорит вам, что делать. Все, что мы можем сказать, это «делать то, что говорит сообщение об ошибке!»
источник