web-dev-qa-db-ja.com

Ubuntu 14.04 LTSのwgetでSSL接続を確立できません

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-generic x86_64)を使用して、GNU linux-gnuでビルドされたWget 1.15、上記のコードを使用してイメージをダウンロードできませんでした。

別の変数は、www.website.comがTLS 1.0を使用することです。これがwgetにどのように影響するかはわかりません。ただし、TLS 1.2 Webサイトから画像を取得した場合、両方のテストケースからssl接続エラーは発生しません。

Ubuntu 14.04またはwget 1.15はTLS 1.0 Webサイトと互換性がありませんか?この接続を有効にするには、ライブラリ/ソフトウェアをインストール/ダウンロードする必要がありますか?

19
xanderlopez

...今のところ、テストしているウェブサイトにのみ発生します。機密情報であるため、ここに投稿することはできません。

次に、TLS1.2と互換性のないサイトの1つだと思います。 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 ...を使用してサイトにアクセスできるかどうかを確認できない場合。

それが他の原因かもしれないことに注意してください、しかし、これは最も可能性が高く、サイトへのアクセスを得ることなく、すべてはとにかく推測に過ぎません。

想定される問題の詳細:通常、クライアントは最も互換性のあるハンドシェイクを使用してサーバーにアクセスします。これは、古いSSLバージョンと互換性のあるSSLv23ハンドシェイクですが、サーバーが最適なバージョンを選択できるように、クライアントがサポートする最適なTLSバージョンを通知します。この場合、wgetはTLS1.2をアナウンスします。しかし、いつかTLS1.2のようなものがあるとは決して想定せず、クライアントがこの最新バージョン(2008年以降)のサポートをアナウンスすると、サーバーの最良バージョンで応答するのではなくハンドシェイクを拒否する壊れたサーバーがいくつかありますサポートします。これらの壊れたサーバーにアクセスするために、クライアントは嘘をつき、最良のバージョンとしてTLS1.0のみをサポートしていると主張しなければなりません。

Ubuntu 14.04またはwget 1.15はTLS 1.0 Webサイトと互換性がありませんか?この接続を有効にするには、ライブラリ/ソフトウェアをインストール/ダウンロードする必要がありますか?

問題はクライアントではなくサーバーです。ほとんどのブラウザは、下位バージョンで再試行することにより、これらの破損したサーバーを回避します。他のほとんどのアプリケーションは、最初の接続試行が失敗すると永久に失敗します。つまり、アプリケーション自体がダウングレードせず、アプリケーション固有の設定によって別のバージョンを適用する必要があります。

15
Steffen Ullrich

あなたは同じ問題があったwgetの古いバージョンを使用している必要があります。私はwget 1.12。を使用していたので、この問題を解決するには2つの方法があります:wgetを更新するか、curlを使用します

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

ホストを信頼する場合は、有効な証明書を追加するか、--no-check-certificateまたは追加:

check_certificate = off

~/.wgetrc

まれに、システム時間が同期していないため、証明書が無効になる場合があります。

2
kenorb

これはほぼ間違いなくnot OPの問題ですが、プロキシの背後にいて_Unable to establish SSL connection_を持たない場合は、wgetから_HTTP_PROXY_を取得することもできます。 _HTTPS_PROXY_環境変数が正しく設定されました。プロキシを指すように_HTTP_PROXY_および_HTTPS_PROXY_を設定してください。

大企業で働いている場合、これは一般的な状況です。

0