java.net.SocketException:连接重置
我正在编写一个应用程序,其中我控制客户端和服务器的代码。 我正在使用SSLSockets来实现它。 我已经使用普通的不安全套接字运行了该协议,但是当我尝试切换到SSLSockets(使用完全相同的协议)时,我会不断得到以下堆栈跟踪: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.
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所建议的那样
无论如何,这可能是一个证书问题——确保您有正确的密钥库和信任库。您将需要密钥库中的一个条目,其中包含:
- 私钥
- 证书
- 证书颁发者的完整链
- 服务器证书的完整证书链
原因可能不同,-Djavax.net.debug=ssl是您的朋友,正如Vladimir Dyuzev所建议的那样 无论如何,这可能是一个证书问题——确保您有正确的密钥库和信任库。您将需要密钥库中的一个条目,其中包含:
- 私钥
- 证书
- 证书颁发者的完整链
- 服务器证书的完整证书链
要确保这确实是软件问题,请尝试在使用不同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