Edited at

HTTPS 時の証明書関連エラーを防ぐための .wgetrc 設定

More than 3 years have passed since last update.


導入

wget を実行するときに下記のような証明書関連のエラーによく出くわします。

$ wget -O - https://www.ana.co.jp/

--2015-07-21 21:27:18-- https://www.ana.co.jp/
www.ana.co.jp (www.ana.co.jp) をDNSに問いあわせています... 23.34.96.213
www.ana.co.jp (www.ana.co.jp)|23.34.96.213|:443 に接続しています... 接続しました。
エラー: www.ana.co.jp の証明書(発行者: `/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec Class 3 EV SSL CA - G2')の検証に失敗しました:
発行者の権限を検証できませんでした。
www.ana.co.jp に安全の確認をしないで接続するには、`--no-check-certificate' を使ってください。

(ロケールが英語の場合)

$ LANG=C wget -O - https://www.ana.co.jp/

--2015-07-21 21:30:03-- https://www.ana.co.jp/
Resolving www.ana.co.jp (www.ana.co.jp)... 23.34.96.213
Connecting to www.ana.co.jp (www.ana.co.jp)|23.34.96.213|:443... connected.
ERROR: cannot verify www.ana.co.jp's certificate, issued by '/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec Class 3 EV SSL CA - G2':
Unable to locally verify the issuer's authority.
To connect to www.ana.co.jp insecurely, use `--no-check-certificate'.

ここで

$ wget -O - https://www.ana.co.jp/ --no-check-certificate

とするのは、ダサいです。

HTTPS なんだから、ちゃんと発行者を検証したいですよね。

そもそも一度怒られてからなんとかするのは、二度手間です。イライラします。


対応方法

下記の手順で対応しました。

実行した環境は CentOS7 前提ですが、ほかの環境でも似たような手順で解決できると思います。

それっぽい CA 情報をごった煮させた上で、 wget のデフォルト設定に加えるというアプローチです。もっといい方法があればだれか教えてください。


Curl の CA 情報を取得

$ wget -q -O $HOME/.cacert.pem http://curl.haxx.se/ca/cacert.pem 


Firefox の CA 情報を追加

Curl の CA 情報は Firefox の情報を元に変換しているので、おそらく内容重複している???

この手順は不要???

$  rpm -ql ca-certificates | fgrep .pem | xargs cat >> $HOME/.cacert.pem 


Rubygems の CA 情報を追加

$ rpm -ql rubygems | fgrep .pem | xargs cat >> $HOME/.cacert.pem 


手元のローカルの Firefox の DB を抽出

さらにダメ元で、ローカルの Firefox の証明書情報を抽出。

一部の HTTPS サイトはこの手順を経ないとダメだった。

$  for db in ~/.mozilla/firefox/*.default*/; do

certutil -L -h "Buildin Object Token" -d $db | \
awk -F " " '!/^Certificate Nickname/{print $1}' | \
xargs -l -inickname certutil -d $db -L -n nickname -a ;
done >> $HOME/.cacert.pem


.wgetrc を修正

echo ca-certificate = $HOME/.cacert.pem >> $HOME/.wgetrc


wget を実行

$ wget https://www.ana.co.jp/ ### 証明書のエラーなく正しく実行できる