Perlでツイッター
投稿:2014-10-24
SSLの脆弱性でツイッターがSSLv3を使用停止にした影響でPerlからのツイートができなくなりました。
事前に情報を入手していなかったので「継続運用していたスクリプトがある日の午前8時以降使えない。」という症状になりました。
ツイッターがSSL/TLS両方可→TLSだけに移行、ブラウザでのツイート可、Perlでのツイート不可。
Perlモジュールの事とか色々調べて、httpd用の「『ホスト検証をする』設定をオフにする」という技を使いツイートできるようになりました。
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;勿論クライアントが使うのはインチキです。 モジュール開発者も想定の範囲なのか、これに関連したトラブルがあったのか 「『ホスト検証オフ』はサーバー用の設定だから、クライアントは『ホスト検証オン』で使ってね」 とツイートする度にしつこく警告してきます。
******************************************************************* Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER together with SSL_ca_file|SSL_ca_path for verification. If you really don't want to verify the certificate and keep the connection open to Man-In-The-Middle attacks please set SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application. ******************************************************************* at C:/Perl64/lib/LWP/Protocol/http.pm line 31.
別件で検索したブログに「セキュリティソフトがクライアントのSSLをブロックするケースがある」と書かれています。
ウチもこの可能性があるのでNOD32のSSL検証を停止して、スクリプトのホスト検証オンで試してみるとあっさりツイートできてしまいました。
いままでの苦労はなんだったんだ…。
NOD32のSSL検証は継続、スクリプトの分は顔パス(?)して欲しいのでプログラム(Perl.exe)指定の例外を設定して、警告無しにツイートできるようになりました。
文字化けしている可能性がありますのでご注意ください。
アプリケーションの登録やアカウントのアプリケーション認証は他のサイトをあたってください。
ソースの文字コードはutf8、Windows7で検証しました。
#!/usr/local/bin/perl -w use utf8; use strict; use warnings; use Encode; use open IO => ":utf8"; binmode STDOUT, ":encoding(cp932)"; use Net::Twitter; use Scalar::Util 'blessed'; my $nt = Net::Twitter->new( ssl => 1, traits => [qw/API::RESTv1_1/], consumer_key => '**********', consumer_secret => '**********', access_token => '**********', access_token_secret => '**********', ); $| = 1; eval { my $result = $nt->update("\@lemorin_jp ツイートのテストです($$)"); }; if ($@) { print "ツイート失敗\n"; my $msg = $@; utf8::encode($msg); $msg = Encode::decode('utf8', $msg); print "結果:$msg\n"; } else { print "ツイート成功\n"; }