相关疑难解决方法(0)

是什么导致我的java.net.SocketException:连接重置?

我们java.net.SocketException: Connection reset在日志中看到频繁但间歇性的 错误.我们不确定Connection reset错误实际来自何处,以及如何进行调试.

该问题似乎与我们尝试发送的邮件无关.请注意,消息不是 connection reset by peer.

有关此异常的典型原因可能是什么的建议,以及我们如何进行?

这是一个代表性的堆栈跟踪(com.companyname.mtix.sms是我们的组件):


    java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:168)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:235)
        at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77)
        at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105)
        at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1115)
        at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832)
        at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1590)
        at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:995)
        at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397)
        at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
        at com.companyname.mtix.sms.services.impl.message.SendTextMessage.sendTextMessage(SendTextMessage.java:127)
        at com.companyname.mtix.sms.services.MessageServiceImpl.sendTextMessage(MessageServiceImpl.java:125)
        at com.companyname.mtix.sms.services.remote.MessageServiceRemoteImpl.sendTextMessage(MessageServiceRemoteImpl.java:43)
        at sun.reflect.GeneratedMethodAccessor203.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
        at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
        at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
        at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
        at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
        at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
        at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)
        at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
        at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699) …

java sockets socketexception connection-reset

136
推荐指数
7
解决办法
81万
查看次数

Java密码套件

我正在尝试使用SSLSocketFactory.getSupportedCipherSuites()来确定返回密码套件的顺序 - 它似乎在Java 1.6和Java 1.7之间有所不同.

我认为这很容易确定,但遇到了一些问题.首先,这是我正在使用的代码:

SSLContext context = SSLContext.getDefault();
SSLSocketFactory sf = context.getSocketFactory();
String[] cipherSuites = sf.getSupportedCipherSuites();
Run Code Online (Sandbox Code Playgroud)

非常直接(如果我做了一些愚蠢的事情,请纠正我).所以,我认为(使用eclipse)我可以进入getSupportedCipherSuites()方法,但似乎源代码不是那样做的(这有什么原因吗?).我在jsse.jar中找到了这个类,并使用JD-Eclipse对它进行了反编译.然而,这给了我一个抽象类,我无法看到抽象类的具体实现(我发现可以使用属性"ssl.SocketFactory.provider"设置类,但这还没有在java.security中指定).我还无法确定如何使用"javax.net.debug"属性打开登录(这会消失为本机方法).

有人能指出我哪里错了吗?

java ssl

13
推荐指数
1
解决办法
5万
查看次数

如何处理最终明文连接的https url

我尝试获取https网址的页面内容,该网址内容在获取输入流时会引发异常.

String httpsURL = "https://careers.virtusa.com/";
URL myurl = new URL(httpsURL);
HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
InputStream ins = con.getInputStream();
Run Code Online (Sandbox Code Playgroud)

例外情况如下,

Exception in thread "main" javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(InputRecord.java:523)
    at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:355)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)    
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)    
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149)    
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)    
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)    
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)      
    at url.JavaHttpsExample.main(JavaHttpsExample.java:18)    
Run Code Online (Sandbox Code Playgroud)

无论HttpURLConnectionHttpsURLConnection失败.我试过org.apache.http.impl.client.CloseableHttpClient但得到了同样的例外.在浏览器中它工作正常.

java https

13
推荐指数
1
解决办法
6195
查看次数

OpenJDK 11 在 JDBC 连接字符串中使用 TLS 1.2

我的远程 MySQL 服务器只接受通过 TLS 1.2 的连接。如何在 JDBC (OpenJDK 11) 中选择协议版本?

SQL State: 28000
java.sql.SQLException: TLS version used does not meet minimal requirements
for this server. Please use a higher TLS version and retry.
Run Code Online (Sandbox Code Playgroud)
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.21</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我试过添加enabledSslProtocolSuites到我的连接字符串,但无济于事。

jdbc:mysql://{server}.mysql.database.azure.com:3306/{database_name}?
  serverTimezone=Australia/Melbourne&useSSL=true&requireSSL=true&enabledSslProtocolSuites=TLSv1.2
Run Code Online (Sandbox Code Playgroud)

-Djdk.tls.client.protocols="TLSv1.2" -Djavax.net.debug=all在启动时添加会mvn exec:java显示对使用 TLS 1.1 的Client Hello 的尝试。

javax.net.ssl|DEBUG|0C|azuremysqltest.App.main()|
2020-08-31 09:16:34.400 UTC|ClientHello.java:653|
Produced ClientHello handshake message (
"ClientHello": {
  "client version"      : "TLSv1.1",
  "random"              : "0D 94 D2 90 A7 C0 ...",
  "session …
Run Code Online (Sandbox Code Playgroud)

java mysql ssl jdbc

4
推荐指数
1
解决办法
3824
查看次数

mosquitto MQTT代理和带有SSL/TLS的Java客户端

我正在使用mosquitto和Eclipse PAHO Java客户端.

在普通的TCP套接字上一切正常.但现在我想使用SSL进行身份验证(不一定需要加密).

首先,我按照http://mosquitto.org/man/mosquitto-tls-7.html的说明进行操作

在mosquitto客户端我不能发布我的消息没有--insecure选项,意味着我必须

mosquitto_pub -h <server-ip> -p <port> -t "/topic1/test" -m "testmsg" --cafile ca_cert.pem --cert client.crt --key client_priv.key --tls-version tlsv1.2 --insecure
Run Code Online (Sandbox Code Playgroud)

否则,mosquitto控制台上会出现一个协议错误

1379576698: OpenSSL Error: error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown
1379576698: OpenSSL Error: error:140940E5:SSL routines:SSL3_READ_BYTES:ssl handshake failure
1379576698: Socket read error on client (null), disconnecting.
Run Code Online (Sandbox Code Playgroud)

- 不安全意味着不检查服务器证书主机名是否与远程主机名匹配.

对我来说有点奇怪的是我正在尝试TLS但是经纪人用SSL做出了回应.

但是我想在我的java paho客户端中启用SSL支持,我坚持这里的例子:https://gist.github.com/sharonbn/4104301

正如你在示例中所看到的那样

SSLContext context = SSLContext.getInstance("TLSv1")
Run Code Online (Sandbox Code Playgroud)

这是否意味着我正在尝试与TLSv1连接,对吧?不幸的是我得到了一个

javax.net.ssl.SSLHandshakeException: message_unknown
Run Code Online (Sandbox Code Playgroud)

我试图切换到TLSv1.2(因为它一直用mosquitto_pub为我工作)并改变了上下文

SSLContext context = SSLContext.getInstance("TLSv1.2")
Run Code Online (Sandbox Code Playgroud)

但后来我得到了

NoSuchAlgorithmException: Unknown protocol: …
Run Code Online (Sandbox Code Playgroud)

ssl mqtt mosquitto

2
推荐指数
1
解决办法
9172
查看次数

SSLSocket使用密码套件

更好地理解TLS机制.我想得到什么是我的服务器的密码套件,并且每个客户同意在握手后使用.但是,我无法在网上找到任何方法或任何信息来执行此操作.

我有Java服务器并访问SSLSockets.

你会怎么建议这样做?

谢谢,

java encryption ssl https

1
推荐指数
1
解决办法
825
查看次数