无法在Ubuntu 14.04 LTS上的wget上建立SSL连接

时间:2015-02-27 03:52:57

标签: linux ubuntu ssl wget

我尝试通过wget下载图像但是我收到错误:无法建立SSL连接。

wget https://www.website.com/image.jpg
--2015-02-26 01:30:17--  https://www.website.com/image.jpg
Resolving www.website.com (www.website.com)... xx.xxx.xx.xx
Connecting to www.website.com (www.website.com)|xx.xxx.xx.xx|:443... connected.
Unable to establish SSL connection.

我的测试用例:

  1. 使用Ubuntu 12.04.4 LTS(GNU / Linux 3.8.0-44-generic x86_64),GNU 在linux-gnu上构建的Wget 1.13.4,我能够下载图像 使用上面的代码。没错。
  2. 使用Ubuntu 14.04 LTS(GNU / Linux 3.13.0-24-通用x86_64),基于linux-gnu的GNU Wget 1.15,我无法下载图像 使用上面的代码。
  3. 另一个变量是www.website.com使用TLS 1.0。我不知道这会如何影响wget。但是,如果我从TLS 1.2网站获取图像,我不会从两个测试用例中获得任何ssl连接错误。

    Ubuntu 14.04或wget 1.15与TLS 1.0网站不兼容吗? 我是否需要安装/下载任何库/软件才能启用此连接?

4 个答案:

答案 0 :(得分:15)

  

...现在只发生在我正在测试的网站上。我不能在这里发布,因为它是保密的。

然后我猜这是与TLS1.2不兼容的网站之一。 12.04中使用的openssl在客户端不使用TLS1.2,而14.04使用TLS1.2可能解释了差异。要解决此问题,请尝试明确使用 --secure-protocol=TLSv1。如果这无法帮助您检查是否可以使用openssl s_client -connect ...(可能不会)和openssl s_client -tls1 -no_tls1_1, -no_tls1_2 ...访问该网站。

请注意,这可能是其他原因,但这个是最有可能的,如果没有访问该网站,一切都只是猜测。

详细假设问题:通常客户端使用最兼容的握手来访问服务器。这是SSLv23握手,它与较旧的SSL版本兼容,但宣布客户端支持的最佳TLS版本,以便服务器可以选择最佳版本。在这种情况下,wget将宣布TLS1.2。但是有一些破碎的服务器从未假设有一天会有类似TLS1.2的东西,并且如果客户端宣布支持这个热门的新版本(从2008年开始!)而不是仅仅响应最佳版本的服务器,它就会拒绝握手支持。要访问这些损坏的服务器,客户端必须撒谎并声称它仅支持TLS1.0作为最佳版本。

  

Ubuntu 14.04或wget 1.15与TLS 1.0网站不兼容吗?我是否需要安装/下载任何库/软件才能启用此连接?

问题是服务器,而不是客户端。 大多数浏览器通过使用较低版本重试来解决这些损坏的服务器。如果第一次连接尝试失败,大多数其他应用程序将永久失败,即它们不会自行降级,并且必须通过某些特定于应用程序的设置强制执行另一个版本。

答案 1 :(得分:7)

你必须使用旧版本的wget我有同样的问题。我正在使用wget 1.12.so解决这个问题有两种方法: 更新wget或使用curl

curl -LO 'https://example.com/filename.tar.gz'

答案 2 :(得分:2)

如果您信任主机,请添加有效证书,指定--no-check-certificate或添加:

check_certificate = off

进入~/.wgetrc

在极少数情况下,您的系统时间可能会不同步,从而使证书无效。

答案 3 :(得分:0)

尽管这几乎肯定不是OP的问题,但如果您是代理人并且没有{{1 }}和Unable to establish SSL connection环境变量已正确设置。确保将wgetHTTP_PROXY设置为指向您的代理。

如果您在大公司工作,这是常见的情况。