wget ssl 警报握手失败
wget ssl alert handshake failure
我正在尝试从 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
在线访问此网页需要表单验证,不确定是否是导致失败的原因。
它从这里开始使用相同的 OpenSSL 版本,但使用更新版本的 wget (1.15)。查看变更日志,关于您的问题有以下重大变化:
1.14: Add support for TLS Server Name Indication.
请注意,此站点不需要 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 版本。
基本上您的 OpenSSL 使用 SSLv3,而您访问的站点不支持该协议。
只需更新您的 wget:
sudo apt-get install wget
或者如果它已经支持另一个安全协议,只需将其添加为参数:
wget https://example.com --secure-protocol=PROTOCOL_v1
我在 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
一种替代方法是将您尝试从中下载的 url 中的 "https" 替换为 "http",以绕过 SSL 连接。不是最安全的解决方案,但这对我来说很有效。
我在 Ubuntu 12.04.3 LTS 上遇到了这个问题(远远超出了 EOL,我知道......)并解决了这个问题:
sudo apt-get update && sudo apt-get install ca-certificates
您可能使用的是旧版本的 wget。我建议使用 Chocolatey 安装 wget,Windows 的包管理器。这应该为您提供更新的版本(如果不是最新的)。
运行 安装 Chocolatey 后执行此命令(作为管理员):
choco install wget
以下命令用于从 TLSv1.2 网站下载文件。
curl -v --tlsv1.2 https://example.com/filename.zip
成功了!
否则使用 curl 可能会更简单。
没有特别需要指定任何选项,可以简单地是:
curl https://example.com/filename.zip
使用 curl 时,在遇到 wget SSL 错误时无需添加 -v 选项。
我正在尝试从 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
在线访问此网页需要表单验证,不确定是否是导致失败的原因。
它从这里开始使用相同的 OpenSSL 版本,但使用更新版本的 wget (1.15)。查看变更日志,关于您的问题有以下重大变化:
1.14: Add support for TLS Server Name Indication.
请注意,此站点不需要 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 版本。
基本上您的 OpenSSL 使用 SSLv3,而您访问的站点不支持该协议。
只需更新您的 wget:
sudo apt-get install wget
或者如果它已经支持另一个安全协议,只需将其添加为参数:
wget https://example.com --secure-protocol=PROTOCOL_v1
我在 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
一种替代方法是将您尝试从中下载的 url 中的 "https" 替换为 "http",以绕过 SSL 连接。不是最安全的解决方案,但这对我来说很有效。
我在 Ubuntu 12.04.3 LTS 上遇到了这个问题(远远超出了 EOL,我知道......)并解决了这个问题:
sudo apt-get update && sudo apt-get install ca-certificates
您可能使用的是旧版本的 wget。我建议使用 Chocolatey 安装 wget,Windows 的包管理器。这应该为您提供更新的版本(如果不是最新的)。
运行 安装 Chocolatey 后执行此命令(作为管理员):
choco install wget
以下命令用于从 TLSv1.2 网站下载文件。
curl -v --tlsv1.2 https://example.com/filename.zip
成功了!
否则使用 curl 可能会更简单。 没有特别需要指定任何选项,可以简单地是:
curl https://example.com/filename.zip
使用 curl 时,在遇到 wget SSL 错误时无需添加 -v 选项。