hogehoge foobar Blog Style Beta

Web,Mac,Linux,JavaScript,Perl,PHP,RegExp,Git,Vim,Redmineなど技術的なことのメモや、ちょっと便利そうなものの紹介をしています。

wgetがhttps(SSL)からのダウンロードが失敗(https_proxy) + curlでのダウンロード

wgethttps(SSL)からのダウンロードが失敗したことがあったので、その備忘録です。
補足として、curl を使ったファイルダウンロードの方法も簡単に書いています。

wgethttps(SSL)からダウンロードしようとして失敗

wget を使用して https(SSL)のファイルをダウンロードしようとしたら失敗しました。

$ wget https://github.com/mrgoofy33/dotfiles_vim/zipball/master
--2011-02-03 23:00:00--  https://github.com/mrgoofy33/dotfiles_vim/zipball/master
github.com をDNSに問いあわせています... 失敗しました: 名前またはサービスが不明です.
wget: ホストアドレス `github.com' を解決できませんでした。

http(非SSL)のファイルは問題なくダウンロードが出来ました。

$ wget http://www.google.co.jp/
--2011-02-03 23:00:00--  http://www.google.co.jp/
your.proxy.server をDNSに問いあわせています... 10.10.10.10
your.proxy.server|10.10.10.10|:8080 に接続しています... 接続しました。
Proxy による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [text/html]
`index.html' に保存中
    [ <=>                                                                 ] 9,039       --.-K/s 時間 0.009s
2011-02-03 23:00:01 (940 KB/s) - `index.html' へ保存終了 [9039]

念のため、wgetのバージョン/ライブラリを確認

念のため、wgetのバージョンとリンクライブラリを確認します。

wgetのバージョン確認

wget のバージョンは「wget --version」で確認出来ます。
新しいバージョンなので特に問題はなさそうです。

$ wget --version
GNU Wget 1.11.4 Red Hat modified

Copyright (C) 2008 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 あるいはそれ以降のバージョン
wgetのリンクライブラリ確認

wget のリンクライブラリの確認は「ldd コマンド」で行います。
「libssl.so」にもリンクされているので、wget自体は問題なさそうです。

$ ldd /usr/bin/wget
        linux-gate.so.1 =>  (0x005ae000)
        libssl.so.6 => /lib/libssl.so.6 (0x001f2000)
        libcrypto.so.6 => /lib/libcrypto.so.6 (0x00c86000)
        libdl.so.2 => /lib/libdl.so.2 (0x00a2b000)
        libz.so.1 => /usr/lib/libz.so.1 (0x00a78000)
        librt.so.1 => /lib/librt.so.1 (0x00aef000)
        libc.so.6 => /lib/libc.so.6 (0x008d0000)
        libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x001c2000)
        libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x0012a000)
        libcom_err.so.2 => /lib/libcom_err.so.2 (0x00dea000)
        libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x00101000)
        libresolv.so.2 => /lib/libresolv.so.2 (0x00c2f000)
        /lib/ld-linux.so.2 (0x008b1000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00a32000)
        libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x00def000)
        libkeyutils.so.1 => /lib/libkeyutils.so.1 (0x00c2a000)
        libselinux.so.1 => /lib/libselinux.so.1 (0x00ad5000)
        libsepol.so.1 => /lib/libsepol.so.1 (0x00a8d000)

.wgetrc に「https_proxy」を追加

wget をプロキシ経由で実行する - スキルの杜 を確認してみると、以前(yum/wgetをproxy経由で使う方法(CentOS))に設定した「.wgetrc」に「https_proxy」の記述が足りていなかったようです。

vim でホームディレクトリにある「.wgetrc」を開いて編集します。

$ vim ~/.wgetrc

下記のように「https_proxy」を追記します。

# Proxy Setting
http_proxy=http://your.proxy.server:8080
https_proxy=http://your.proxy.server:8080 → これを追記
proxy_user=username
proxy_password=password

設定を再読込させるために、一度ログオフして再ログインをします。

再度、wgetでhttps(SSL)からダウンロードしてみる

「.wgetrc」の設定が出来たので、再度 wget でhttps(SSL)からファイルをダウンロードしてみます。

「SSL による接続が確立できません」で失敗

前回と同じように wget を実行すると、「SSL による接続が確立できません」という形でエラーメッセージが表示されて、ダウンロードが失敗しました。

$ wget https://github.com/mrgoofy33/dotfiles_vim/zipball/master
--2011-02-03 23:43:11--  https://github.com/mrgoofy33/dotfiles_vim/zipball/master
your.proxy.server をDNSに問いあわせています... 10.10.10.10
your.proxy.server|10.10.10.10|:8080 に接続しています... 接続しました。
エラー: 証明書に記載されている名前 `*.github.com' とホスト名 `github.com' が一致しません
github.com に安全の確認をしないで接続するには、`--no-check-certificate' を使ってください。
SSL による接続が確立できません。
「--no-check-certificate」を指定して成功

さっきのメッセージの中に「安全の確認をしないで接続するには、`--no-check-certificate' を使ってください。」とあるので、「--no-check-certificate」を指定して、再度 wget を実行してみます。

$ wget --no-check-certificate https://nodeload.github.com/mrgoofy33/dotfiles_vim/zipball/master
--2011-02-03 23:45:49--  https://nodeload.github.com/mrgoofy33/dotfiles_vim/zipball/master
your.proxy.server をDNSに問いあわせています... 10.10.10.10
your.proxy.server|10.10.10.10|:8080 に接続しています... 接続しました。
Proxy による接続要求を送信しました、応答を待っています... 200 OK
長さ: 494545 (483K)
`master' に保存中
100%[====================================================================>] 494,545     53.7K/s 時間 8.8s

2011-02-03 23:46:01 (54.9 KB/s) - `master' へ保存完了 [494545/494545]

今度はダウンロードが成功しました。
・・・が、ファイル名が「master」という名前のままでダウンロードされてしまいました。

$ ls -l
合計 492
-rw-r--r-- 1 user group 494545  2月  3 23:46 master
「-O hoge.zip」を指定して別ファイル名でダウンロード

別ファイル名でダウンロードするには「-O」オプションを使用します。「-O ファイル名」の形で指定します。
※以下のサンプルでは「hoge.zip」という名前でダウンロードしています。

$ wget --no-check-certificate -O hoge.zip https://nodeload.github.com/mrgoofy33/dotfiles_vim
/zipball/master
--2011-02-03 23:46:54--  https://nodeload.github.com/mrgoofy33/dotfiles_vim/zipball/master
your.proxy.server をDNSに問いあわせています... 10.10.10.10
your.proxy.server|10.10.10.10|:8080 に接続しています... 接続しました。
Proxy による接続要求を送信しました、応答を待っています... 200 OK
長さ: 494545 (483K)
`hoge.zip' に保存中
100%[====================================================================>] 494,545      119K/s 時間 4.0s

2011-02-03 23:47:00 (119 KB/s) - `hoge.zip' へ保存完了 [494545/494545]

今度は指定したファイル名でダウンロードすることができました。

$ ls -l
合計 492
-rw-r--r-- 1 user group 494545  2月  3 23:47 hoge.zip

補足)curlでのファイルのダウンロード

wget でのダウンロード方法/設定を書きましたが、curl を使えば、「.wgetrc」のような設定をしなくても、ファイルをダウンロードすることが出来ます。

$ curl -L -x http://username:password@your.proxy.server:8080 -o hoge.zip https://github.com/mrgoofy33/dotfiles_vim/zipball/master

今回参考にしたページ

wget をプロキシ経由で実行する
http://www.geocities.jp/gronlijus/skill/linux/linux-wget-proxy.html

wgethttpsがダウンロードできない ≪ ブログタイトル
http://junichi.moe.hm/blog_boyaki_wget-de-https.html

wgethttpsがダメなのはca-certificatesが無いのが原因だった ≪ ブログタイトル
http://junichi.moe.hm/blog_debian_wget-de-https-2.html

curlの使い方
http://www.big.or.jp/~crane/cocoa/0800_internet/curl/