- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我创建了一个 web server基于套接字。它可以通过 HTTPS 或 HTTP 提供文件。
我遇到的问题发生在使用 Firefox 和 Chromium 通过 HTTPS 从服务器请求文件(例如图像)时。
当 Firefox 从位于 https://localhost:8443/ada.jpg
的服务器请求图像时,Firefox 报告
SSL_ERROR_RX_RECORD_TOO_LONG
同样,Chromium 错误
ERR_SSL_PROTOCOL_ERROR
虽然以下工作正常:
curl -Ok "https://localhost:8443/ada.jpg"
https://localhost:8443/
http://localhost:8443/ada.jpg
我在浏览器获取图像时使用 Wireshark 查看帧:Firefox 和 Chromium 都在图像仍在传输时向服务器发送 [FIN, ACK]
帧.服务器继续发送部分图像,然后浏览器发送一个 [RST]
帧。
这些是 Firefox 和服务器之间交换的最后几帧:
25 1.873102771 ::1 ::1 TCP 86 55444 → 8443 [ACK] Seq=937 Ack=18043 Win=56704 Len=0 TSval=3976879013 TSecr=3976879013
26 1.873237965 ::1 ::1 TLSv1.3 110 Application Data
27 1.873247272 ::1 ::1 TCP 86 8443 → 55444 [ACK] Seq=18043 Ack=961 Win=65536 Len=0 TSval=3976879013 TSecr=3976879013
28 1.873346910 ::1 ::1 TCP 86 55444 → 8443 [FIN, ACK] Seq=961 Ack=18043 Win=65536 Len=0 TSval=3976879013 TSecr=3976879013
29 1.876736432 ::1 ::1 TLSv1.3 16508 Application Data
30 1.876769660 ::1 ::1 TCP 74 55444 → 8443 [RST] Seq=962 Win=0 Len=0
Here是 cURL 和 Firefox 的 Wireshark 捕获。
要重现错误,请执行
git clone git@gitlab.com:bullbytes/simple_socket_based_server.git
cd simple_socket_based_server
./gradlew run
这将启动启用了 TLS 的服务器。然后,在您的浏览器中打开以下网址(第一次您必须为自签名证书添加异常(exception)):
https://localhost:8443/ada.jpg
要说服自己在禁用 TLS 时传输图像成功,请像这样启动服务器:
./gradlew run --args="--use-tls=no"
从协议(protocol)中删除 s
后,图像应该显示在您的浏览器中:
http://localhost:8443/ada.jpg
服务器的请求处理循环是here .
如何进一步调试并修复它?
我在 Arch Linux 5.2.9 上使用 OpenJDK 12.0.2+10。
最佳答案
它已在 JDK 13 中修复¹。
原始错误报告是 here与标题
TLSv1.3 may generate TLSInnerPlainText longer than 2^14+1 bytes
这与问题中的观察结果一致:比 violates 长的记录TLSv1.3 协议(protocol)。
This bug report声明 Java 的 TLS 实现已通过 this commit 在 JDK 11.0.5 b01 和 13 中得到修复.
一般来说,JDK 13 reimplemented Socket
和 ServerSocket
²,使它们能够很好地与 project Loom 中引入的纤程配合使用.
我为 JDK 12 提交的错误是 here .
如果在您的情况下无法升级 JDK,您可以使用 ServerSocketChannel
而不是 ServerSocket
现在。 Jetty这样做。
¹Arch Linux 上的 OpenJDK build 13+33 不会出现此错误:图像在 Firefox 中显示正常
²<子> The server用于重现错误的是构建在 ServerSocket
上的。
关于java - 自定义服务器的 SSL_ERROR_RX_RECORD_TOO_LONG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57679669/
我用谷歌搜索了这个错误,但没有找到解决方案,这是在我安装 oracle 数据库 11g 时发生的,我试图到达 https://localhost:1158/em并且这个错误在 firefox 中弹出
我创建了一个 web server基于套接字。它可以通过 HTTPS 或 HTTP 提供文件。 我遇到的问题发生在使用 Firefox 和 Chromium 通过 HTTPS 从服务器请求文件(例如图
我需要帮助来检查 SSL 实现。 资料: 服务器版本:Apache/2.4.29 (Ubuntu) 服务器版本:Apache/2.4.29 (Ubuntu) OpenSSL 1.1.1d 2019 年
我在我的 Ubuntu 服务器上安装了 Postfix、Courier 和其他一些与电子邮件相关的服务。数据是从 MySQL 数据库中获取的。但是,当我尝试通过 Thunderbird 进行连接时,出
我正在尝试将付款详情发送给银行。银行告诉我,我必须使用 ssl 对他们的 URL 进行操作: ...(所有隐藏值) 我想做的是发送带有 header 的所有信息(位置:'https://www.ban
我编写了简单的 Java HTTPS 服务器。 创建服务器套接字: KeyStore keyStore = KeyStore.getInstance("JKS"); keyStore.load(
我最近使用 nginx 在 EC2 上托管了一个 React 应用程序。 React 应用程序在端口 3000 上运行。 所以我使用 - 将 HTTP 和 HTTPS 请求重定向到端口 3000 su
我已经使用以下 SSL 命令创建了一个证书: makecert -r -pe -n "CN=www.yourserver.com" -b 01/01/2000 -e 01/01/2036 -eku 1
我已经用 C# 编写了自己的网络服务器。 而且我总是在端口 443 上的新 IP 中为我的站点建立 SSL 证书。而且它总是工作正常。 但是这次我得到了这个错误: Secure Connection
这个问题我已经看过很多次了,但是所有的答案都帮不了我,因为我只是租用了服务器空间,无法管理它。 我做了以下事情: 我已经从 PositiveSSL 购买了域名和 ssl 证书 我已经购买了具有专用 I
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我遵循了位于此处的有关 https 设置的官方文档:https://help.ubuntu.com/6.06/ubuntu/serverguide/C/httpd.html#https-configu
我正在尝试在我的 Tomcat 中启用 SSL。但是当我启动 Tomcat 并转到 https://localhost:8443 时我明白了 An error occurred during a co
我有一个站点,它在一些旧的 ubuntu 服务器上与 apache 完美运行,并且还有 https。但是现在由于某些原因我需要移动到不同的(具有高配置的新 ubuntu 服务器)服务器并尝试使用 Ng
我将 MAMP 升级到版本 6(不是 PRO)。 当我使用 npm start 任务启动本地 wordpress 项目时,Firefox 会自动重定向到 https://localhost:3000
我正在服务 A 和服务 B 之间实现相互 SSL。服务 A 使用单向和双向 SSL。 1 路用于用户和网站 A 之间的通信,2 路 SSL 以安全的方式将该用户的请求转发到服务 B。 服务 A 中的单
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve
基本信息: - I hosted my app in IIS7.5 - I created a new "Self-signed certificate" in IIS - Site Bindings
我正在尝试将 Sonarqube 配置为使用 SSL。我遵循了以下说明: https://docs.sonarqube.org/latest/setup/operate-server/ 下面是我的配置
我的应用程序使用 Rails 3.2 和 Ruby 1.9,必须在 https 中运行应用程序,域名如 https://welcome.com在我的系统上。所以我通过为域名和 https 创建 ssl
我是一名优秀的程序员,十分优秀!