(2/26 追記: 解決! id:satob:20060226:p2)
例えば、 Debian sarge で、 w3m ではてなのログインページ (https://www.hatena.ne.jp/login) にアクセスしようとすると、次のメッセージが出力される。
unable to get local issuer certificate: accept? (y/n)
これは、 w3m の使用するサーバ証明書が指定されていない(指定されている場所にない)のが原因である。
対策としては、次の手順でサーバ証明書リストを作成し、 w3m から使えるようにすればよい。
$ grep 'ssl_ca_path' /etc/w3m/config ssl_ca_path /etc/ssl/certs
-
- grep でマッチする行がなければ、行を追加すればいい……と思う。
- 作業用ディレクトリを作る。 Mozilla ソース中の mozilla/security/nss/lib/ckfw/builtins/certdata.txt を Mozilla LXR から持ってくる。
$ mkdir tmp $ cd tmp/ ~/tmp$ wget -O certdata.txt http://lxr.mozilla.org/seamonkey/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
- w3m のドキュメント README.SSL に含まれている、次の Ruby スクリプト certdata2pem.rb を実行する。 certdata.txt が w3m で使う用のファイルに分解される。
#!/usr/bin/ruby # Copyright (c) 2001 Fumitoshi UKAI <ukai@debian.or.jp> # All rights reserved. # This is free software with ABSOLUTELY NO WARRANTY. # # You can redistribute it and/or modify it under the terms of # the Ruby's licence. # # certdata2pem.rb while line = $stdin.gets next if line =~ /^#/ next if line =~ /^\s*$/ line.chomp! if line =~ /CKA_LABEL/ label,type,val = line.split(' ',3) val.sub!(/^"/, "") val.sub!(/"$/, "") fname = val.gsub(/\//,"_").gsub(/\s+/, "_").gsub(/[()]/, "=") + ".pem" next end if line =~ /CKA_VALUE MULTILINE_OCTAL/ data='' while line = $stdin.gets break if /^END/ line.chomp! line.gsub(/\\([0-3][0-7][0-7])/) { data += $1.oct.chr } end open(fname, "w") do |fp| fp.puts "-----BEGIN CERTIFICATE-----" fp.puts [data].pack("m*") fp.puts "-----END CERTIFICATE-----" end puts "Created #{fname}" end end system("c_rehash", ".")
~/tmp$ ruby certdata2pem.rb < certdata.txt
- 不要なファイルは削除した後、生成されたファイルを "grep 'ssl_ca_path' /etc/w3m/config" で得られたディレクトリ(ここでは /etc/ssl/certs)に移動する。
~/tmp$ rm certdata.txt certdata2pem.rb ~/tmp$ sudo mv * /etc/ssl/certs/
- ファイルの移動先のディレクトリに移動して、 c_rehash コマンドを実行する。
$ cd /etc/ssl/certs/ $ sudo c_rehash
これで、 w3m で https://www.hatena.ne.jp/login に問題なくアクセスできるようになる。