Quiero crear un servidor de notificaciones push y al instalar el certificado SSL y el archivo .p12 en el servidor nos enfrentamos al siguiente error: Quiero saber qué está mal con el certificado SSL porque recibo el error 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)
//código fuente
/**
*
*/
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();
}
}
}
Respuestas:
No es habitual cargar la clave privada como una solicitud del cliente en un socket SSL. Personalmente, creo que deberías cargar la clave pública. La clave privada se carga mediante el socket SSL en el lado del servidor. La única razón por la que necesitaría la clave privada es para actuar como un servidor y aceptar conexiones desde el otro extremo, pero parece que no lo está haciendo.
Esto podría explicar el mensaje "cert en formato incorrecto".
En referencia a:
fuente
Creo que el error es bastante evidente, su cadena de certificados en realidad no verifica su certificado correctamente. ¿Quizás te estás perdiendo uno o más de los certificados de encadenamiento necesarios para verificar tu certificado final final?
Sea lo que sea, el error le da instrucciones muy claras para "Verificar que el almacén de claves que proporcionó se produjo de acuerdo con las especificaciones ...".
No hay nada que nadie en este sitio pueda agregar más que leer lo que dice su mensaje de error y hacerlo: ninguno de nosotros tiene bolas de cristal, ni podemos solucionar mágicamente su problema.
No veo el punto de publicar una pregunta en la que no nos proporciona más información que un mensaje de error MUY claro que le dice exactamente qué hacer. Todo lo que podemos decir es "¡haz lo que dice el mensaje de error!"
fuente