2012-02-29 56 views
3

我正尝试使用javapns库中的liferay向我的设备发送推送通知。下面的代码:收到致命警报:handshake_failure

private void pushNotification(ActionRequest actionRequest, 
      ActionResponse actionResponse) { 

     try { 
      System.out.println("Push"); 

      Push.alert("Hello World!", "ck.p12", "PASSPHRASE", false, "TOKEN"); 

     } catch (CommunicationException e) { 
      System.out.println("CommunicationException"); 
      e.printStackTrace(); 
     } catch (KeystoreException e) { 
      System.out.println("KeystoreException"); 
      e.printStackTrace(); 
     } 

    } 

我得到这个错误时,pushNotification叫:

ERROR [PushNotificationManager:450] Delivery error: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 

我GOOGLE了它,但无法找到任何解决方案。

有谁知道如何解决这个问题?

回答

9

javax.net.ssl.SSLHandshakeException异常通常在您尝试连接的服务器没有授权CA颁发的有效证书时抛出。

简而言之,您尝试连接的服务器很可能使用自签名证书,并且您必须在Java代码中适应这一点。这涉及到创建自定义KeyStore等。请参阅this Stack Overflow答案以获取完整的实现细节。

+0

是的,我面临同样的问题。您需要为服务器提供密钥库和密钥库密码。 – 2013-09-20 14:25:06

0

在服务器上设置以下属性

javax.net.ssl.keyStore=../keystore/keystoreFile.jks 
javax.net.ssl.keyStorePassword=yourPassword 
javax.net.ssl.trustStore=../keystore/keystoreFile.jks 
javax.net.ssl.trustStorePassword=yourPassword 
javax.net.debug=true 

您可以创建使用

keytool -genkey -alias myKeyStore -keyalg RSA -keystore /home/aniket/keystore/keystoreFile.jks 
0

这种算法中发生在例如服务器只接受TLS和你的客户正试图密钥库创建一个SSL连接...检查服务器/客户端配置

相关问题