我正在尝试从https网站下载文件并继续收到以下错误:
OpenSSL: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
Unable to establish SSL connection.
从在线阅读博客我收集到必须提供服务器证书和客户端证书。我找到了如何下载服务器证书而不是客户端证书的步骤。有没有人有一套完整的步骤来使用wget与SSL?我也尝试过--no-check-certificate选项但是没有用。
wget version: wget-1.13.4
openssl version: OpenSSL 1.0.1f 6 Jan 2014
尝试从coursera.org上的课程网页下载所有讲座资源。因此,URL看起来像这样:https://class.coursera.org/matrix-002/lecture
在线访问此网页需要表单身份验证,不确定是否导致失败。
答案 0 :(得分:32)
它可以在这里使用相同的OpenSSL版本,但更新版本的wget(1.15)。查看更改日志,您的问题有以下重大变化:
1.14:添加对TLS服务器名称指示的支持。
请注意,此网站不需要SNI。但www.coursera.org
需要它。
如果您使用-v --debug
致电wget(正如我在评论中明确建议的那样!),您会看到:
$ wget https://class.coursera.org
...
HTTP request sent, awaiting response...
HTTP/1.1 302 Found
...
Location: https://www.coursera.org/ [following]
...
Connecting to www.coursera.org (www.coursera.org)|54.230.46.78|:443... connected.
OpenSSL: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
Unable to establish SSL connection.
因此错误实际上发生在www.coursera.org
,原因是缺少对SNI的支持。您需要升级您的wget版本。
答案 1 :(得分:2)
我在SLES12,对我来说,它在升级到wget 1.14之后工作,使用--secure-protocol = TLSv1.2并使用--auth-no-challenge。
wget --no-check-certificate --secure-protocol=TLSv1.2 --user=satul --password=xxx --auth-no-challenge -v --debug https://jenkins-server/artifact/build.x86_64.tgz
答案 2 :(得分:1)
我在Ubuntu 12.04.3 LTS上遇到了这个问题(远远超出了EOL,我知道......)并且用它来解决这个问题:
sudo apt-get update && sudo apt-get install ca-certificates
答案 3 :(得分:0)
基本上,您的OpenSSL使用SSLv3,而您访问的站点不支持该协议。
只需更新你的wget:
sudo apt-get install wget
或者,如果它已经支持另一个安全协议,只需将其添加为参数:
wget https://example.com --secure-protocol=PROTOCOL_v1
答案 4 :(得分:0)
另一种方法是更换" https"用" http"在您尝试下载的网址中,只是绕过SSL连接。不是最安全的解决方案,但这在我的案例中有效。
答案 5 :(得分:0)
您可能有旧版本的wget。我建议使用Chocolatey(Windows的程序包管理器)安装wget。这样应该可以为您提供最新版本(如果不是最新版本)。
在安装Chocolatey之后(以管理员身份)运行以下命令:
choco install wget
答案 6 :(得分:0)