████が好きな物事を書きます

████(U_Plus_2588)が好きなことや好きな物について書きます。

LWP::UserAgentでhttpsに接続できないのが解決してないから現時点までのメモ

一連の流れ

#!/usr/bin/perl

use strict;
use LWP::UserAgent;
use Encode;

my $ua = LWP::UserAgent->new();

$ua->agent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8');
$ua->default_headers->push_header('Accept-Language' => "ja-jp");

my $url = 'https://etsuran.mlit.go.jp/TAKKEN/kensetuKensaku.do';

print decode('Shift_JIS' , $ua->get($url)->content);

こんな感じのスクリプトhttpsに接続しようとすると、

MacBook-Pro:Documents up2$perl get.pl
Can't connect to etsuran.mlit.go.jp:443 (LWP::Protocol::https::Socket: SSL connect attempt failed error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure)
LWP::Protocol::https::Socket: SSL connect attempt failed error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure at /Library/Perl/5.18/LWP/Protocol/http.pm line 50.

というようなエラーが発生してしまいます。検索すると、全く同じ問題についての日本語の記事が複数見つかるありがたい時代になったなと実感します。

これらのサイトによると、Crypt::SSLeay、IO::Socket::SSL、Net:SSLなどのモジュールが必要なようです。そしてこれらのインストールには、homebrewによってOpenSSLを インストールする必要があるのだと。そしてそのOpenSSLを環境変数に追加してcpan install するとエラーが出ます。

Running make install
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ERROR: Can't create '/Library/Perl/5.18/darwin-thread-multi-2level/Crypt'
mkdir /Library/Perl/5.18/darwin-thread-multi-2level/Crypt: Permission denied at /System/Library/Perl/5.18/ExtUtils/Install.pm line 469.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
at -e line 1.
make: *** [pure_site_install] Error 13
NANIS/Crypt-SSLeay-0.72.tar.gz
/usr/bin/make install -- NOT OK

パーミッションが拒否されたのsudoしてみると、今度はまた別のエラーが出ます。

openssl-version.c:2:10: fatal error: 'openssl/opensslv.h' file not found
#include <openssl/opensslv.h>
^~~~~~~~~~~~~~~~~~~~
1 error generated.
Failed to build and link a simple executable using OpenSSL
No 'Makefile' created'YAML' not installed, will not store persistent state
NANIS/Crypt-SSLeay-0.72.tar.gz
/usr/bin/perl Makefile.PL -- NOT OK

sudoすると環境変数が変わるのかを確認したりcpan installする前にエラーがでたファイルのパーミッションを変えてみればいいのかもしれないのですが、ちょっと疲れたので今日はここまでにしておきます。あとLWP::Protocol::httpsはインストールできたのでとりあえず例にあった通りにスクリプトを書き換えて試してみましたがが、インストールする前と同じエラーが出ました。

my $ua = LWP::UserAgent->new(
ssl_opts => {
    SSL_ca_path     => '/etc/ssl/certs',
    verify_hostname => 1,
}
);

その場しのぎはできてる

URLをhttpsからhttpに変えても同じサイトにアクセス出来るので、そちらなら普通にGETが通ります。ですがSSLに接続できていないという問題は根本的に解決していないので、どうにかしたいなというところです。