wget はコマンドでウェブ上のファイルのダウンロードを行ってくれるプログラム。Windows 版の wget が https で始まるアドレスにアクセスすると、SSL 認証のエラーを起こす問題で、解決方法が存在していたので書き記しておく。
ERROR: cannot verify … certificate
古いバージョンの wget
を使ってファイルをダウンロードしようとすると、次のようなエラーがでる。
$ wget https : //raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
--2018 -11 -13 14 : 58 : 18 -- https : //raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
Resolving raw . githubusercontent . com ( raw . githubusercontent . com ) . . . 151.101.72.133
Connecting to raw . githubusercontent . com ( raw . githubusercontent . com ) | 151.101.72.133 | : 443... connected .
ERROR : cannot verify raw . githubusercontent . com 's certificate, issued by ' CN =DigiCert SHA2 High Assurance Server CA , OU =www . digicert . com , O =DigiCert Inc , C =US ':
Unable to locally verify the issuer' s authority .
To connect to raw . githubusercontent . com insecurely , use ` --no -check -certificate '
これは、--no-check-certificate
オプションを与えることで回避できるが、悪意のあるサイトにアクセスすると問題があるので、できれば使わないことにこしたことはない。
$ wget https : //raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar --no-check-certificate
既存のバージョンを確認
インストールされている wget のバージョンを調べる。こちらの環境では 1.16.1。
$ wget --version
GNU Wget 1.16.1 built on mingw32 .
+digest +https +ipv6 +iri +large -file -nls +ntlm +opie -psl +ssl /openssl
$ which wget
/c /Program Files /wget /wget
which wget
などでインストール場所を確認。ちなみに which
コマンドは Windows のコマンドプロンプトでは使えない。なので、Windows 用の Bash コンソールが入ってない場合は、Windows のコマンドプロンプトで使えないコマンドなどがあるので、エミュレーター をインストールしておく。
最新版の入手
最新版をチェックすると、1.19.4 のようだ。しかも、SSL 関連のアップデートがなされている。
Version 32-bit binary 64-bit binary Notes 1.19.4 wget-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.3 wget-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.2 wget-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.1 wget-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.18 wget-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.1 wget-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.17 wget-1.17-win32.zip
wget-1.17-win64.zip
OpenSSL 1.0.2d, ZLib 1.2.8, taskbar progressbar , man page 1.16.3 wget-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.2 wget-1.16.2-win32.zip wget-1.16.2-win64.zip OpenSSL 1.0.2, ZLib 1.2.8, taskbar progressbar , man page 1.16.1 wget-1.16.1-win32.zip wget-1.16.1-win64.zip OpenSSL 1.0.1j, ZLib 1.2.8, taskbar progressbar , man page
(参照: Windows binaries of GNU Wget )
最新版をダウンロードし、C:\Program Files\wget
下の wget.exe
と置き換える。そして、再度コマンドを実行してみる。
$ wget https : //raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
--2018 -11 -13 14 : 56 : 27 -- https : //raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
Resolving raw . githubusercontent . com ( raw . githubusercontent . com ) . . . 151.101.72.133
Connecting to raw . githubusercontent . com ( raw . githubusercontent . com ) | 151.101.72.133 | : 443... connected .
HTTP request sent , awaiting response . . . 200 OK
Length : 5366981 ( 5.1M ) [ application /octet -stream ]
Saving to : 'wp-cli.phar.2'
0K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 % 215K 24s
( 略)
5200K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 % 1.23M =5.9s
2018 -11 -13 14 : 56 : 34 ( 884 KB /s ) - 'wp-cli.phar.2' saved [ 5366981 /5366981 ]
これで、--no-check-certificate
オプションを指定しなくてもエラーが出なくなる。
余談
このようなコマンドは自動化スクリプトに組み込んで使うことが多いので、普段はいちいちタイプして使うことはあまりなかった。実際 --no-check-ceritificate
もスクリプト内で使ってたりする。そして、そのスクリプトは書いてからかれこれ3年ほど経つ。ただ、プログラム自体をアップデートさせることでそのような問題が解決されることがある、というのは再確認することとなった。
かといって、ディペンデシーを常にアップデートさせたほうが良いかというと、これは議論が分かれるところで、ケースバイケース。セキュリティ関連のアップデートはしたほうがいいものの、余計な機能追加のアップデートは得てして新しいバグが紛れ込んでいたり、全体のパフォーマンスを低下させるようなケースもある。WordPress で 4.7 だったかな。REST API が導入されて、セキュリティホールが同時に発生したというケースもある。
機能を重視するか、保守性を重視するか、で意見が異なってくるだろう。趣味や研究目的の場合はガンガンアップデートしたらいいけど、ビジネスでクライアントにサービス提供するために使っている場合は、慎重な姿勢のほうが良いのではないか。