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";
}
