巷を一部賑わせているこの話題ですが、私が保有してるサーバでも一部のものでだけTwitter APIを使ったPHPのシステムが動かなくなりました。どうやらPHPかPHPライブラリかOpenSSLかどれかがTLS1.2に対応していないようなので色々いじってみます。
とりあえず
yum update openssl
をおもむろに実行。
ちなみに使っているPHPライブラリは「twitteroauth」です。古いバージョンをこれまで使っていたのですが、だいぶ便利になっている(
https://aws2000.net/?p=2296 参考。画像投稿も簡単で素晴らしい!)ようなので、ついでにこのライブラリをアップデートします(tmhOAuthも以前使っていましたが乗り換えました)。
ここでまずTwitter投稿を試してみます。
・・・どうやら必須PHPバージョンが上がったようで、[]表記の配列宣言などがどんどん引っかかります。
という事で結局PHPをアップデートする事にします。現在さくらのVPSサーバを利用しておりCentOS6でPHPはVer.5.3.3となっています。
PHPの実行環境をもう少し詳しくみてみましょう。
php -r "phpinfo();" | grep tls
とするとやっぱりtlsv1.2の文字は見当たりません。
PHPをアンインストールしてremiリポジトリーからPHP5.6をインストールします。
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm yum remove php-* yum install --enablerepo=remi-php56 php php php-devel php-mbstring php-mysql php-gd
む?とりあえずバージョンアップしたのですが、ツールが全く動かなくなりました。なので、
yum install --enablerepo=remi-php56 php-mcrypt php-php-gettext php-xml
まで入れてやると動くようになりました(勿論どういう処理を用いているかで必要パッケージは異なります)。
あらためてphpinfo()を実行するとまばゆい「tlsv1.2」の文字が。
というわけでTwitter投稿を試してみます。
・・・twitteroauthが「SSL connection error」みたいなエラーを吐きますね。
twitteroauthのソースを見ると、どうやらcurlのSSL接続設定が抜けているようです。
twitteroauth\src\TwitterOAuth.phpのrequest()内にある「case ‘POST’:」内に
$options[CURLOPT_SSLVERSION]=CURL_SSLVERSION_TLSv1_2;
を追加すると、無事にTwitter投稿が出来るようになりました!
(他のサーバではずっと普通に投稿出来てるのは何故だろう・・・まあいいや)
コメント