As I Please

MTのいんすとーるの練習と、その他びぼうろく・・・

pop2imap が certifcate でエラー

imaptoolsの代わりになるものを探すと、あっさりその名もpop2imap。今回の perlでモジュールをいくつか追加するだけでよさそう、と思ったらSSLサーバの認証が厳しくなってた。
普通に使うと、

From pop3 server [popserver] port [110] user [popuser]
To   imap server [imapserver] [ssl] port [993] user [imapuseruser]
TimeZone :[asia/tokyo]
Login POP OK
Unable to connect to imapserver: SSL connect attempt failed error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed  ...propagated at /usr/local/bin/pop2imap line 242.

と、今回は imap側のみSSLにしているが、エラーになる。
いろいろ検索してみると出てくるが、利用しているモジュール Mail::IMAPClient の中で呼ばれている IO::Socket::SSLでの証明書の取扱が厳格になったため、IMAPサーバで利用している勝手証明書(自己CA署名)の verifyが通らないからのようだ。https://metacpan.org/pod/IO::Socket::SSL#SSL_verify_modeにあるように、serverのときは SSL_VERIFY_NONE,clientとして使うときは SSL_VERIFY_PEERと、なり今回のように imap clientとして動作するときはその正当性を見るらしい。CAルートとして、SSL_ca_file,SSL_ca_path などで設定することもできたり、IO::Socket::SSLをインストールすると入る? Mozzila/CA/cacert.pm を見に行くようになっている。
勝手証明書を指定したり、正規の証明書を取得するのもありだけど、そこそこ面倒なので、単に IO::Socket::SSLを呼ぶときに SSL_VERIFY_NONE にしてしまうのが一番簡単かと。どうするべと思っていたら、
Mail::IMAPClientに、Socketargsという設定があって Mail::IMAPClientから IO::Socket::SSLを呼ぶときにパラメータ設定ができるようになっているのでこれを利用することにする。

*** /usr/local/bin/pop2imap     Thu Dec 27 21:49:13 2018
--- /usr/local/bin/pop2imap_noac        Wed Jan  9 19:53:45 2019
***************
*** 233,238 ****
--- 233,239 ----
                Uid      => 1,
                Debug    => $debugimap,
                Timeout  => $timeout2,
+               Socketargs => [ SSL_verify_mode => 0 ],
        ) ;
        if(!$starttls2) {
                $common{'Ssl'} = $ssl2;
とした、pop2imap_noacを利用。ただし versrion指定があって、
Version note: attribute added in Mail::IMAPClient 3.34
の模様。現在の時点では 3.40 。

コメントする