当前位置: 首页 > 知识库问答 >
问题:

java.io.EOF异常:SSL对等端关闭错误

郦磊
2023-03-14

我有以下代码:

package daoImp;

import java.util.List;

import javapns.Push;
import javapns.communication.exceptions.KeystoreException;
import javapns.notification.PushedNotification;
import javapns.notification.ResponsePacket;
import org.json.JSONException;
import com.sun.jmx.snmp.daemon.CommunicationException;

public class Notification {

    public static void main(String args[]) {
        try {
            new Notification().sendMessageToAPN();
        } catch (CommunicationException | KeystoreException | JSONException
                | javapns.communication.exceptions.CommunicationException e) {
            e.printStackTrace();
        }
    }

    public void sendMessageToAPN() throws CommunicationException,
            KeystoreException, JSONException,
            javapns.communication.exceptions.CommunicationException {
        String regId1 = "6f9d340ab4d0f81206f7d8c1ab7b8994d90d139e0d1d2b99999b02887e60d54f";
        List<PushedNotification> notifications = Push.alert("hello","C:/Program Files (x86)/Java/jdk1.7.0_21/jre/lib/security/gameover.p12", "gameover",
                false, regId1);
        for (PushedNotification notification : notifications) {
            if (notification.isSuccessful()) {
                System.out.println("Push notification sent successfully to: " + notification.getDevice().getToken());

            } else {
                String invalidToken = notification.getDevice().getToken();
                System.err.println("Invalid Token " + invalidToken);

                System.out.println(" The problem was");
                Exception theProblem = notification.getException();
                theProblem.printStackTrace();

                ResponsePacket theErrorResponse = notification.getResponse();
                if (theErrorResponse != null) {
                    System.out.println(theErrorResponse.getMessage());
                }
            }
        }
    }
}

当我运行代码时,我得到以下异常消息:与ssl的握手失败,因为在握手期间与远程主机的连接失败。

log4j:WARN No appenders could be found for logger (javapns.notification.Payload).
log4j:WARN Please initialize the log4j system properly.
Invalid Token 6f9d340ab4d0f81206f7d8c1ab7b6774d90d139e0d1d2b58599b02887e60d54f
 The problem was
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.writeRecord(Unknown Source)
    at sun.security.ssl.AppOutputStream.write(Unknown Source)
    at java.io.OutputStream.write(Unknown Source)
    at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:402)
    at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:350)
    at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:320)
    at javapns.Push.sendPayload(Push.java:177)
    at javapns.Push.alert(Push.java:47)
    at daoImp.Notification.sendMessageToAPN(Notification.java:27)
    at daoImp.Notification.main(Notification.java:16)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
    at sun.security.ssl.InputRecord.read(Unknown Source)
    ... 12 more

我不知道为什么我会收到这条信息。

共有3个答案

壤驷涛
2023-03-14

我想你的证书丢了。

您可以使用InstallCerts应用程序生成它们。(http://miteff.com/install-cert)

或http://opentox.ntua.gr/blog/77-ssl-certificates

获得证书后,需要将其放在jdk主页中的安全目录下,例如:

C:\ProgramFiles\Java\jdk1。6.0_45\jre\lib\security

希望这能解决你的问题

漆雕原
2023-03-14

出现此问题是因为互联网连接问题/互联网连接不良。请检查您的互联网连接。

阎修杰
2023-03-14
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Caused by: java.io.EOFException: SSL peer shut down incorrectly

上述异常是我们在客户机中遇到的一般异常,如果存在以下任何情况:

  • 如果服务器和客户端支持不同版本的TLS,例如服务器支持TLS2,而客户端仅支持TLS1。此问题可以通过在客户端设置以下属性来解决:

系统。setProperty(“https.protocols”、“TLSv1、TLSv1.1、TLSv1.2”)

  • 如果服务器无法验证客户端的证书链,那么它也将关闭连接

证书链qtp510727907-31,致命错误: 42:空证书链javax.net.ssl.SSLHandshakeExc0019:空证书链%%无效:[会话-3,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA]
qtp510727907-31,发送TLSv1警报:致命,描述=bad_certificateqtp<--plhd-4/>,WRITE: TLSv1警报,长度=2
主,WRITE: TLSv1更改密码规范,长度=1 qtp510727907-31,致命:发动机已经关闭。
javax.net.ssl.SSLHandshakeExc0019:空证书链

要知道故障的确切原因,我们需要启用-Djavax。网debug=all同时执行对服务器的客户端调用。

 类似资料:
  • 在从Jetty服务器下载文件的客户端Ant任务中,我偶尔会收到 我在谷歌上搜索了一段时间,但到目前为止,我还没有一个结论性的答案来解释为什么会发生这种情况。 谁能解释一下这个例外的根本原因是什么? 我的Jetty日志似乎没有这个异常的等效痕迹。然而,Jetty服务器似乎确实正在终止安全连接。 作为一个背景——当蚂蚁任务产生的两个客户端使用相同的证书从码头服务器下载预定的文件时,我看到了这个异常。我

  • 我有一个问题,集成liquibase maven执行与一个mysql 5.7数据库由Azure作为一个服务.错误日志是: 无法执行目标组织。liquibase:liquibase maven插件:3.0.5:项目上的状态(默认cli)-:设置或运行liquibase:com时出错。mysql。jdbc。例外情况。jdbc4。通信异常:通信链路故障发送到服务器的最后一个数据包是575毫秒前的。握手期

  • 如果我在以下URL上运行上述代码:https://eztv.it/shows/887/the-blacklist/,它将按预期工作。两个URL文件大小之间的差异似乎是一个促成因素。在测试同一个服务器的不同URL时,上面的代码似乎只适用于小于30KB的文件。以上任何内容都将生成上述异常。

  • 问题内容: 我需要通过HTTPS协议发出请求。我写了以下代码: 我使用 java.io.EOFException 得到了这个异常stacktrace : 我从 https://google.com 获得了成功的响应,但是以上URL(https://ancine.band.com.br/xml/pgrt1_dta_20150303.xml)中的此错误。 使用PHP,.NET和NodeJS,URL可以

  • 我需要通过HTTPS协议提出请求。我编写了以下代码: 有人知道为什么会这样吗?

  • 问题内容: 我正在尝试做一个简单的HttpGet来读取网页。我在iOS和Android上通过http(而非https)工作。 网址是内部网络IP和自定义端口,因此我可以使用以下路径使用http读取此类内容: 当我尝试使用https时,出现错误。所以我尝试使用此代码: 但这给我一个错误。 我究竟做错了什么?我可以放心地忽略该证书,因为它是一个具有自签名证书的内部网络,但是我无法控制版本,我的应用程序