Httpsサイトからファイルをダウンロードしようとすると、次のエラーが表示されます。
OpenSSL: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
Unable to establish SSL connection.
オンラインでブログを読むことから、サーバー証明書とクライアント証明書を提供する必要があります。サーバー証明書をダウンロードする手順を見つけましたが、クライアント証明書はダウンロードしていません。 SSLでwgetを使用するための完全なステップセットはありますか? --no-check-certificateオプションも試しましたが、うまくいきませんでした。
wget version: wget-1.13.4
openssl version: OpenSSL 1.0.1f 6 Jan 2014
coursera.orgのコースのWebページからすべての講義リソースをダウンロードしようとしています。したがって、URLは次のようになります。 https://class.coursera.org/matrix-002/lecture
このWebページにオンラインでアクセスするには、フォーム認証が必要ですが、それが失敗の原因かどうかはわかりません。
ここから同じ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のバージョンをアップグレードする必要があります。
私は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
私はUbuntu 12.04.3 LTSでこの問題を抱えていました(EOLをはるかに超えています...)、それで回避しました:
Sudo apt-get update && Sudo apt-get install ca-certificates
基本的に、OpenSSLはSSLv3を使用し、アクセスしているサイトはそのプロトコルをサポートしていません。
Wgetを更新するだけです:
Sudo apt-get install wget
または、別の安全なプロトコルを既にサポートしている場合は、引数として追加します。
wget https://example.com --secure-protocol=PROTOCOL_v1
おそらく、古いバージョンのwgetがあります。 Windowsのパッケージマネージャーである Chocolatey を使用してwgetをインストールすることをお勧めします。これにより、最新バージョン(最新でない場合)が提供されます。
Chocolateyを(管理者として)インストールした後、次のコマンドを実行します。
choco install wget
1つの代替方法は、SSL接続を回避するために、ダウンロードしようとしているURLの「https」を「http」に置き換えることです。最も安全なソリューションではありませんが、私の場合はこれでうまくいきました。