Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.net.SocketException:连接重置_Java_Sockets_Ssl - Fatal编程技术网

java.net.SocketException:连接重置

java.net.SocketException:连接重置,java,sockets,ssl,Java,Sockets,Ssl,我正在编写一个应用程序,其中我控制客户端和服务器的代码。 我正在使用SSLSockets来实现它。 我已经使用普通的不安全套接字运行了该协议,但是当我尝试切换到SSLSockets(使用完全相同的协议)时,我会不断得到以下堆栈跟踪: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at com.sun.

我正在编写一个应用程序,其中我控制客户端和服务器的代码。 我正在使用SSLSockets来实现它。 我已经使用普通的不安全套接字运行了该协议,但是当我尝试切换到SSLSockets(使用完全相同的协议)时,我会不断得到以下堆栈跟踪:

java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:168)
        at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
        at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:782)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:739)
出于某种原因,完全相同的代码完全适用于不安全的套接字。为什么会这样

如有任何反馈,将不胜感激。多谢各位


Pablo

根据您使用的操作系统,它可能需要管理员/root权限才能绑定或侦听SSL端口。尝试使用管理员权限(在Windows中)或sudo'd(在Linux上)运行应用程序。

根据您使用的操作系统,可能需要管理员/root权限才能绑定或侦听SSL端口。尝试使用管理员权限(在Windows中)或sudo'd(在Linux上)运行应用程序。

从您的帖子中无法检测到问题。
当您切换到安全套接字时,默认情况下使用最安全的密码。
如果未正确配置信任库/密钥库(或未启用未经身份验证的套件),则SSL握手将失败。
例外情况似乎表明了这一点。

您可以使用
javax.net.debug=ssl,handshake
运行程序,以启用ssl调试信息,并在希望有人帮助您时发布调试信息和代码。

从您的帖子中无法检测到问题。
当您切换到安全套接字时,默认情况下使用最安全的密码。
如果未正确配置信任库/密钥库(或未启用未经身份验证的套件),则SSL握手将失败。
例外情况似乎表明了这一点。

您可以使用
javax.net.debug=ssl,handshake
运行您的程序,以启用ssl调试信息,并在希望有人帮助您时发布调试信息和代码。

原因可能会有所不同,-Djavax.net.debug=ssl是您的朋友,正如Vladimir Dyuzhev所建议的那样

无论如何,这可能是一个证书问题——确保您有正确的密钥库和信任库。您将需要密钥库中的一个条目,其中包含:

  • 私钥
  • 证书
  • 证书颁发者的完整链
和一家信托商店:

  • 服务器证书的完整证书链
我在生成正确的密钥库时遇到问题(trustore很容易——只需使用keytool)。对于密钥库,您需要这样的st(带有openssl+java的Linux):


原因可能不同,-Djavax.net.debug=ssl是您的朋友,正如Vladimir Dyuzev所建议的那样

无论如何,这可能是一个证书问题——确保您有正确的密钥库和信任库。您将需要密钥库中的一个条目,其中包含:

  • 私钥
  • 证书
  • 证书颁发者的完整链
和一家信托商店:

  • 服务器证书的完整证书链
我在生成正确的密钥库时遇到问题(trustore很容易——只需使用keytool)。对于密钥库,您需要这样的st(带有openssl+java的Linux):


要确保这确实是软件问题,请尝试在使用不同internet连接的其他计算机上运行。这可能是一个软件错误,但上次我看到这个症状时,是一个有故障的路由器造成的。为了确保这确实是一个软件问题,请尝试在使用不同internet连接的不同机器上运行。这可能是一个软件错误,但上次我看到这个症状时,一个有故障的路由器是罪魁祸首。-Djavax.net.debug=ssl是调试ssl最有用的东西。-Djavax.net.debug=ssl是调试ssl最有用的东西。“ssl端口”是什么?HTTPS小于1024,对。但是没有为SSL/TLS分配特定的编号,那么“SSL端口”是什么呢?HTTPS小于1024,对。但是没有为SSL/TLS分配特定的编号。当按照建议进行调试时,我会在消息写入后立即收到“HandlingException:java.net.SocketException:Connection reset”,因此没有任何线索。即使证书是使用从live链接获取的.CRT文件导入的,还有其他方法解决这个问题吗?当按照建议进行调试时,我会在消息写入后立即得到“处理异常:java.net.SocketException:Connection reset”,因此没有任何线索。即使证书是使用从live链接获取的.CRT文件导入的,还有其他方法解决这个问题吗?
# convert all to PEM
openssl x509 -in ${ca}.der -inform DER -outform PEM -out ${ca}.pem
openssl x509 -in ${subca}.der -inform DER -outform PEM -out ${subca}.pem
# create one large PEM file containing certificate chain
cat ${ca}.pem ${subca}.pem > tmp_cert_chain.pem
# generate PKCS#12 BUNDLE
openssl pkcs12 -export -in ${cert}.pem -inkey ${key}.pem -certfile tmp_cert_chain.pem -out tmp_pkcs12.pfx
# convert PKCS#12 bundle to JKS
keytool -importkeystore -srckeystore tmp_pkcs12.pfx -srcstoretype pkcs12 -srcstorepass ${storepass} -destkeystore $keystore -deststoretype jks -deststorepass ${storepass}
# print out JKS keystore
keytool -list -keystore $keystore -storepass $storepass