【问题标题】:Received fatal alert: handshake_failure收到致命警报:handshake_failure
【发布时间】:2012-03-18 21:18:54
【问题描述】:

我正在尝试使用 liferay 中的 javapns 库向我的设备发送推送通知。代码如下:

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

我用谷歌搜索了它,但找不到任何解决方案。

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

【问题讨论】:

    标签: java push-notification liferay


    【解决方案1】:

    当您尝试连接的服务器没有来自授权 CA 的有效证书时,通常会引发 javax.net.ssl.SSLHandshakeException 异常。

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

    【讨论】:

    • 是的,我遇到了同样的问题。您需要向服务器提供密钥库和密钥库密码。
    【解决方案2】:

    在服务器上设置以下属性

    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
    

    【讨论】:

      【解决方案3】:

      这种算法发生在例如服务器只接受 TLS 并且您的客户端尝试创建 SSL 连接...同时检查服务器/客户端配置

      【讨论】:

        猜你喜欢
        • 2015-12-04
        • 2012-10-15
        • 2018-02-09
        • 2019-01-02
        • 2018-08-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多