Help us understand the problem. What is going on with this article?

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/ ### 証明書のエラーなく正しく実行できる
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした