AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 799964
Accepted
doublep
doublep
Asked: 2016-08-31 02:59:01 +0800 CST2016-08-31 02:59:01 +0800 CST 2016-08-31 02:59:01 +0800 CST

SSL 握手:服务器是否应该选择较早的协议?

  • 772

我们必须使用 HTTPS 将我们的应用程序(用 Java 8 编写)连接到一些非常旧的服务器。作为 Java 8,我们的客户端支持 TLSv1.2、TLSv1.1、TLSv1 和 SSLv3。当然,它更喜欢使用 TLSv1.2,因为它是最新的协议。

但是,服务器 (Oracle-HTTP-Server 11.1.1.7) 仅支持 TLSv1 和 SSLx。此外,它支持的密码套件选择非常有限,但仍有一个共同的套件可以与 TLSv1 一起使用:SSL_RSA_WITH_3DES_EDE_CBC_SHA(又名 TLS_RSA_WITH_3DES_EDE_CBC_SHA)。

但是,直接连接会因服务器终止握手而失败。我们得到的调试输出(在客户端)如下所示:

main, WRITE: TLSv1.2 Handshake, length = 265
main, READ: TLSv1 Alert, length = 2
main, RECV TLSv1.2 ALERT:  fatal, close_notify
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLException: Received fatal alert: close_notify

对我来说,看起来服务器甚至没有尝试回退到 TLSv1:一旦客户端声明 TLSv1.2 为首选,服务器就会退出。

相比之下,当我们在客户端中明确禁用 TLSv1.2 和 TLSv1.1,从而使 TLSv1 成为首选选项时,握手成功。

我们还尝试连接到另一个不知道 TLSv1.2 和 TLSv1.1 的旧服务器,但这里的连接按预期工作:即使客户端说它更喜欢 TLSv1.2,他们同意服务器使用 TLSv1,作为最佳通用协议:

main, WRITE: TLSv1.2 Handshake, length = 269
main, READ: TLSv1 Handshake, length = 85
...

问题:服务器是否有责任从客户端支持的 TLS/SSL 协议列表中进行选择?我可以对服务器维护人员说行为不端的是服务器,而不是我们的客户端吗?

ssl legacy tls
  • 1 1 个回答
  • 3053 Views

1 个回答

  • Voted
  1. Best Answer
    Steffen Ullrich
    2016-08-31T03:06:50+08:002016-08-31T03:06:50+08:00

    服务器是否有责任从客户端支持的 TLS/SSL 协议列表中进行选择?

    客户端不提供支持的版本列表。客户端提供它可以提供的最佳版本,服务器应该回复服务器支持的最佳版本,该版本等于或低于客户端版本。如果客户端不愿意接受太低的版本,客户端将抛出错误并关闭连接。

    我可以对服务器维护人员说行为不端的是服务器,而不是我们的客户端吗?

    我想你可以这么说。任何正确实现 TLS 1.0 的服务器都应该能够处理来自客户端的 TLS 1.2 连接,因为该协议是专门以这种方式设计的。不幸的是,仍然有足够多的损坏的 TLS 实现。

    • 4

相关问题

  • 如何使用 Tomcat 5.5 更新 SSL 证书

  • 为 IIS6 自行生成 SSL 证书?

  • plesk 上的域和子域 ssl 访问

  • 如何设置 SSL 邮件服务器?

  • 如何通过 SVN 命令行接受 SSL 证书?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve