为什么我可以使用 Firefox 或 WGET 访问网站,但不能使用 CURL 或 Ruby

Sum*_*mak 3 ruby ssl curl openssl wget

当我尝试访问这个网站时,我得到了不同的结果,具体取决于我使用的工具:CURL 和 Ruby 的 Net::HTTP 模块都返回一个SSLError wrong signature type. 虽然我没有详尽地测试访问它的所有方法,但我想知道是什么导致了这种差异。我的猜测是对 TLS 的不同支持,好像某些工具在面对旧的 TLS 版本时更能容忍。

一些附加信息:

  • 本地机器: Linux debian 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64 GNU/Linux
  • 本地机器 OpenSSL 版本: OpenSSL 1.1.1d 10 Sep 2019
  • 服务器加密: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 256bit keys, TLS 1.
  • 服务器最有可能的 SSL/TLS 实现(使用tls_prober
                                 OpenSSL 1.0.1e-48.el6_8.1 RHEL 6:  95.93%
                             OpenSSL 1.0.1e-42.el6_7.4 RHEL 6.7.z:  95.93%
                          OpenSSL 1.0.1e-30.el6_6.12 RHEL 6.6.AUS:  95.93%
                              OpenSSL 1.0.1h default source build:  95.83%
                          OpenSSL 1.0.1e-16.el6_5.16 RHEL 6.5.AUS:  92.88%
                               OpenSSL 1.0.1 default source build:  92.54%
                                   OpenSSL 1.0.1k Debian 8 Apache:  91.67%
                              OpenSSL 1.0.1g default source build:  91.67%
                               OpenSSL 1.0.2 default source build:  90.51%
                              OpenSSL 1.0.1a default source build:  87.50%
Run Code Online (Sandbox Code Playgroud)

谁能给我一个高级解释为什么有些工具得到 200OK,而其他工具返回 SSLError '错误的签名类型'?

小智 8

您常用的 Web 浏览器和 CURL(以及其他一些浏览器)之间的区别在于 SNI(服务器名称指示)的使用。总而言之,SNI 是客户端将在请求中发送的信息,以告诉服务器他正在访问哪个域,它允许您在同一 IP 地址上配置多个网站,但也可以配置不同的证书。

从您网站上的SSLLab 测试来看,您的域的证书(使用 SNI 时提供)是好的,但默认证书(未提供 SNI 时)无效。这就是为什么您只在特定软件上出现错误的原因。

因此,您需要修复默认证书,为默认网站使用有效的证书(如果此服务器托管多个网站)或相同(如果此服务器上只有此网站)。

  • 好东西。但到哪里去做呢?人们需要使用菜单上的配置文件或配置选项来执行此操作吗?(我知道每个软件可能会有所不同,请问如何使用 CURL?)谢谢,祝大家好运。 (2认同)