ssl - javax.net.ssl 警告“user_canceled”是什么意思?
问题描述
我正在通过 SSL 连接到服务器。这适用于 OpenJDK8 262 和 265。
有了 275,我突然在输出中看到了这个:
javax.net.ssl|FINE|5F|pool-1-thread-1|2021-03-02 10:47:27.085 CET|Logger.java:765|Received alert message (
"Alert": {
"level" : "warning",
"description": "user_canceled"
}
static final byte alert_user_canceled = 90;
当我在 repo 中搜索这个常量时,我只得到一个命中(在将代码转换为字符串的方法中):
case alert_user_canceled:
return "user_canceled";
搜索所有 OpenJDK 源会产生相同的命中:https ://github.com/search?q=org%3Aopenjdk+alert_user_canceled&type=code
我难住了。谁发出这个警告,为什么?
更新:经过更多测试,我得到的印象是远程端发送了“取消”。那可能吗?对我来说,这没有意义,因为我连接到服务器(我发送 ClientHello,我收到 ServerHello)。
解决方案
您看到的是您尝试与之握手的服务器发送的警报(如TLS 协议规范第 7.2 节“警报协议”中所定义)。
90
在上面链接的规范中, ( )的警报代码user_canceled
描述如下:
由于某种与协议故障无关的原因,此握手被取消。如果用户在握手完成后取消了某个操作,那么仅仅通过发送 close_notify 来关闭连接更为合适。此警报后应跟随 close_notify。此消息通常是警告。
简而言之,这表示此特定警报代码旨在指示取消握手过程的实现特定原因。因此,如果不知道另一端正在运行什么服务器软件,就不可能说出究竟出了什么问题。
您可以尝试通过比较工作版本和损坏版本的握手过程的详细日志来调试连接,看看有什么不同。这可能会提供一些有关如何解决此问题的见解。
推荐阅读
- amazon-redshift - 在 Redshift 中使用正则表达式来获取匹配模式之前的单词
- python - Spark - HashingTF inputCol 接受一列,但我想要更多
- linux - 有没有办法配置 sqlplus 将错误输出到 STDERR 而不是 STDOUT?
- java - 在继续之前检查是否授予了写入存储的权限
- c++ - 在成员变量中设置对象实例会导致错误 - 被隐式删除,因为默认定义格式错误
- php - 使用直接从我正在使用的书中键入的 fizzbuzz.php 时出现 (T_CONSTANT_ENCAPSED_STRING) 解析错误
- python-3.x - Python:关闭多处理线程会停止整个程序
- node.js - 如何将此 cURL 命令重写为 axios 代码
- c - if 语句后的 Printf 命令不起作用
- javascript - 如何将 decorator() 的语法更改为 @decorator