Perlでの作業中
ちょっとスクリプトからWebページをゲロってこようと思い、LWP::UserAgentなどを使って、取得していた。
ちょっとhttpsあたりも必要に迫られ、getしようとしたらエラーを吐いてくる。
ふむふむ。
ぐぐってみると、Crypt::SSLeayを入れろとな。
ちうことで、
$ sudo perl -MCPAN -e shell
で、CPANから入れることに。
cpan[1]> install Crypt::SSLeay
通常は、これでOKなはずなのに…。エラー吐いてくれます。
でもなぁ、CPANから自動で入れているのにmakeで転けられても…。
でも、昔の出来事を思い出してテストして見ることに。
「接続を拒否されました」というメッセージが気になる。
Linuxの初期に良くあったのだけれど、これってLANG=Cでないと動かないんじゃ?
ちゅうことで、再度やり直してみる。
英語モードで再度実行!
一旦、抜けてcpanの起動から。
$ LANG=C sudo perl -MCPAN -e shell
表示はもともと英語だし、何も問題ないはず。
同様に、Crypt::SSLeayを入れてみる。
全てのテストに合格して、無事インストール完了!!
やはりな!って感じです。
はっ!! インストールが目的ではなかった…。
さて、SSLが使えるようになっているはずなので、テストする。
500 Can't verify SSL peers without knowning which Certificate Authorities to trust
orz...
SSL証明書と一致しないらしい…。
もうひと踏ん張り。
SSL 証明書のエラー時の対応
どうやら、良く発生するようで…。あちこちに対応策が書かれていた。
[Perl] LWP::UserAgent で SSL 証明書のエラーへの対応
の記述がわかり易かった。
- ホスト名の検証をしない
- CAを明示する
いやいや、1はまずいんでは?という思うので、2の方針で。
Mozilla::CAを入れれば良さそう。
さっそく、cpanでMozilla::CAをインストール。
スクリプトの最初にuseを突っ込む。
でもダメやった…。
「
CPANで「Crypt::SSLeay」をインストールする際のエラー対処」なんて素敵なページを見つけて実行するも、変化なし。
検証しない方向でテスト
なんやかんやと、スクリプトを書き換えて、結局この辺りで落ち着いた。
use LWP::UserAgent;
BEGIN {
$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = "Net::SSL";
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
}
my $agent = LWP::UserAgent->new(
ssl_opts => { verify_hostname => 0 },
);
環境変数の変更と、念のためオプションを設定してやったら、エラー無しで動作した。
しかしなぁ…。
そのうちバージョンが上がると、何もなかったように動いたりするんだろうな…。
パッケージの中身まで解析する時間的余裕はないので、まぁひとまずOKということで…。
コメント
コメントを投稿
励みになりますので、簡単で良いので一言くださいませ。