質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

2回答

4677閲覧

perlでhttpsアクセスができなくなったのを動作するように環境を直したい

h5x

総合スコア11

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2020/09/03 17:33

編集2020/09/05 18:40

下記プログラムについて、過去5年位問題なく普通に動いていたのですがここ2ヶ月ほど動かなくなる事があり不安定でした。そこで、Perlモジュールなど様々なものをアップデートしていると完全にここでスクリプトが止まり動かなくなりました。SSL関連で失敗しているようなのですがどのようにすれば解決しますでしょうか?

環境
Windows 10 64bit
ActivePerl 5.22

perl

1 use WWW::Mechanize; 2 my $ua = WWW::Mechanize->new( autocheck => 1 ); 3# $ua->ssl_opts( verify_hostname => 0 ); 4 $ua->get("https://yahoo.jp/"); 5 my $source = $ua->content; 6 open(F,">test.html"); 7 print F $source; 8 close F; 9 print $source; 10```Error GETing https://yahoo.jp/: Can't connect to yahoo.jp:443 at D:\Programming\test.pl line 4. 11と表示されプログラムが途中でストップします。 12 13ちなみに、他のhttpsを使うスクリプトでは下記のようなエラーメッセージも表示されていました。 14Error GETing https://github.com/: SSL upgrade failed: SSL connect attempt failed error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed at testx.pl line 262. 15 16なお、以下であれば期待通りの動作をします。 17```perl 18 use WWW::Mechanize; 19 my $ua = WWW::Mechanize->new( autocheck => 1 ); 20 $ua->ssl_opts( verify_hostname => 0 ); 21 $ua->get("http://yahoo.jp/"); 22 my $source = $ua->content; 23 open(F,">test.html"); 24 print F $source; 25 close F; 26 print $source; 27```もしくは 28```perl 29 use WWW::Mechanize; 30 my $ua = WWW::Mechanize->new( autocheck => 1 ); 31# $ua->ssl_opts( verify_hostname => 0 ); 32 $ua->get("http://yahoo.jp/"); #httpでアクセスする 33 my $source = $ua->content; 34 open(F,">test.html"); 35 print F $source; 36 close F; 37 print $source;

Perl本体やモジュールがおかしいのか気になり、コードを以下に書き換え、strawberry-perl(Portable)と上記のActivePerlで試して見ました。それぞれ以下のエラーが表示されました。
なお、opensslは
Win64OpenSSL_Light-1_0_0e.exe
Win64OpenSSL-1_1_1g.exe
Win64OpenSSL_Light-1_1_1g.msi
をそれぞれ試してみましたが無理でした。

strawberry-perl(Portable)
Can't connect to yahoo.jp:443 (Bad file descriptor)
Bad file descriptor at C:/PortableApp/strawberry-perl-5.32.0.1-64bit-PDL/perl/vendor/lib/LWP/Protocol/http.pm line 50.

ActivePerl
Can't connect to yahoo.jp:443
Bad file descriptor at C:/Perl/site/lib/LWP/Protocol/http.pm line 46.

perl

1use strict; 2#use Mozilla::CA; 3use LWP::UserAgent; 4my $ua = LWP::UserAgent->new; 5#$ua->ssl_opts( verify_hostname => 0 ); 6# $ua->ssl_opts( SSL_ca_file => Mozilla::CA::SSL_ca_file() ); 7my $url; 8$url = "http://yahoo.jp/"; 9$url = "https://yahoo.jp/"; 10my $res = $ua->get($url); 11my $source = $res->content; 12open(F,">test.html"); 13print F $source; 14close F; 15print $source;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2020/09/03 18:39

「期待通りの動作」をしていることが確認できたコードがあるなら、それを使えばいいのでは?
h5x

2020/09/03 19:08

回答いただきありがとうございます。 セキュリティーを無視していますので動作確認としては良いそうですが、通常利用では利用は好ましくないらしいのです。 また、様々な過去のスクリプト全てを書き換えるのは現実的ではなく環境を使えるものにしたく思っています。
guest

回答2

0

あてずっぽうになってしまいますが、以下を最新のものにしてみてはいかがでしょうか。

Mozilla::CA
LWP::UserAgent
LWP::Protocol::https

投稿2021/04/29 15:47

twata1

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

手元では再現できないのであてずっぽうですが…。

このエラーは証明書の検証に失敗したために出ていると思いますが、証明書を含んでいるMozilla::CAモジュールは新しすぎてもうまく行かなくなる場合もあるようです。「様々なものをアップデートすると動かなくなった」ということなのでこれがヒットしているのかもしれません。

https://www.perlmonks.org/?node_id=1118455

Mozilla::CAモジュールを元のバージョンに戻してみてはどうでしょうか?

投稿2020/09/04 21:07

harrek

総合スコア123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h5x

2020/09/05 06:11

回答いただきありがとうございます。 過去のシステムバックアップ、 https://curl.haxx.se/docs/caextract.html からcacert.pemを色々更新してみましたが残念ながらどれで行っても同じエラーがでました。 正直、これが何をしているのかよくわかっていない状況なのですが、 $ua->ssl_opts( verify_hostname => 0 ); を入れた状態で運用するとまずいでしょうかね?
h5x

2020/09/05 07:07

ちなみに、以下コードを挿入すると確実に利用できるという話をネットで見かけ利用しましたが同じ状況でした。 use Mozilla::CA; $ua->ssl_opts( SSL_ca_file => Mozilla::CA::SSL_ca_file() );
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問