我正在尝试使用 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
我用谷歌搜索但找不到任何解决方案。
有谁知道如何解决这个问题?
答案 0 :(得分:9)
当您尝试连接的服务器没有来自授权CA的有效证书时,通常会抛出javax.net.ssl.SSLHandshakeException
异常。
简单地说,您尝试连接的服务器很可能使用自签名证书,您必须在Java代码中容纳该证书。这涉及创建自定义KeyStore
等。有关完整的实施详细信息,请参阅this Stack Overflow答案。
答案 1 :(得分: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
答案 2 :(得分:0)
例如,当服务器仅接受TLS 并且您的客户端正在尝试创建SSL连接时,会发生此算法...同时检查服务器/客户端配置