Windows 用の wget で ERROR: cannot verify certificate の解決法

wget はコマンドでウェブ上のファイルのダウンロードを行ってくれるプログラム。Windows 版の wget が https で始まるアドレスにアクセスすると、SSL 認証のエラーを起こす問題で、解決方法が存在していたので書き記しておく。

ERROR: cannot verify … certificate

古いバージョンの wget を使ってファイルをダウンロードしようとすると、次のようなエラーがでる。

これは、--no-check-certificate オプションを与えることで回避できるが、悪意のあるサイトにアクセスすると問題があるので、できれば使わないことにこしたことはない。

既存のバージョンを確認

インストールされている wget のバージョンを調べる。こちらの環境では 1.16.1。

which wget などでインストール場所を確認。ちなみに which コマンドは Windows のコマンドプロンプトでは使えない。なので、Windows 用の Bash コンソールが入ってない場合は、Windows のコマンドプロンプトで使えないコマンドなどがあるので、エミュレーターをインストールしておく。

最新版の入手

最新版をチェックすると、1.19.4 のようだ。しかも、SSL 関連のアップデートがなされている。

Version32-bit binary64-bit binaryNotes
1.19.4wget-1.19.4-win32.zip, wget.exe wget-1.19.4-win64.zip, wget.exe OpenSSL 1.1.0g, ZLib 1.2.11, gpgme-1.10.0, taskbar progressbar, Windows certificate store support, manual
1.19.3wget-1.19.3-win32.zip, wget.exe wget-1.19.3-win64.zip, wget.exe OpenSSL 1.1.0g, ZLib 1.2.11, gpgme-1.10.0, taskbar progressbar, Windows certificate store support, manual
1.19.2wget-1.19.2-win32.zip, wget.exe wget-1.19.2-win64.zip, wget64.exe OpenSSL 1.1.0f, ZLib 1.2.11, taskbar progressbar, Windows certificate store support, manual
1.19.1wget-1.19.1-win32.zip wget-1.19.1-win64.zip OpenSSL 1.1.0e, ZLib 1.2.11, taskbar progressbar, Windows certificate store support, manual
1.18wget-1.18-win32.zip wget-1.18-win64.zip OpenSSL 1.0.2h, ZLib 1.2.8, taskbar progressbar, Windows certificate store support, manual
1.17.1wget-1.17.1-win32.zip wget-1.17.1-win64.zip OpenSSL 1.0.2e, ZLib 1.2.8, taskbar progressbar, Windows certificate store support, man page
1.17wget-1.17-win32.zip wget-1.17-win64.zip OpenSSL 1.0.2d, ZLib 1.2.8, taskbar progressbar, man page
1.16.3wget-1.16.3-win32.zip wget-1.16.3-win64.zip OpenSSL 1.0.2a, ZLib 1.2.8, taskbar progressbar, man page
1.16.2wget-1.16.2-win32.zipwget-1.16.2-win64.zipOpenSSL 1.0.2, ZLib 1.2.8, taskbar progressbar, man page
1.16.1wget-1.16.1-win32.zipwget-1.16.1-win64.zipOpenSSL 1.0.1j, ZLib 1.2.8, taskbar progressbar, man page

(参照: Windows binaries of GNU Wget)

最新版をダウンロードし、C:\Program Files\wget  下の wget.exe と置き換える。そして、再度コマンドを実行してみる。

これで、--no-check-certificate オプションを指定しなくてもエラーが出なくなる。

余談

このようなコマンドは自動化スクリプトに組み込んで使うことが多いので、普段はいちいちタイプして使うことはあまりなかった。実際 --no-check-ceritificate もスクリプト内で使ってたりする。そして、そのスクリプトは書いてからかれこれ3年ほど経つ。ただ、プログラム自体をアップデートさせることでそのような問題が解決されることがある、というのは再確認することとなった。

かといって、ディペンデシーを常にアップデートさせたほうが良いかというと、これは議論が分かれるところで、ケースバイケース。セキュリティ関連のアップデートはしたほうがいいものの、余計な機能追加のアップデートは得てして新しいバグが紛れ込んでいたり、全体のパフォーマンスを低下させるようなケースもある。WordPress で 4.7 だったかな。REST API が導入されて、セキュリティホールが同時に発生したというケースもある。

機能を重視するか、保守性を重視するか、で意見が異なってくるだろう。趣味や研究目的の場合はガンガンアップデートしたらいいけど、ビジネスでクライアントにサービス提供するために使っている場合は、慎重な姿勢のほうが良いのではないか。


Leave a Reply

Your email address will not be published. Required fields are marked *