1. ホーム
  2. ssl

[解決済み] wget ssl alert ハンドシェイク失敗

2022-02-16 20:24:47

質問

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のコースのウェブページからすべての講義リソースをダウンロードしようとしています。ですから、URLは次のようになります。 https://class.coursera.org/matrix-002/lecture

このウェブページにオンラインでアクセスするには、フォーム認証が必要です。それが失敗の原因になっているかどうかはわかりません。

解決するには?

OpenSSLのバージョンは同じですが、wgetのバージョンが新しい(1.15)ので、ここから動作します。Changelogを見ると、あなたの問題に関して次のような重要な変更があります。

<ブロッククオート

1.14: TLSサーバ名表示に対応しました。

なお、このサイトではSNIは必要ありません。しかし www.coursera.org が必要です。 そして、もしあなたがwgetを -v --debug (私のコメントで明確に推奨しているように!)あなたは見ることができます。

$ 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のバージョンアップが必要です。