7月25日(米国時間)に古い「TLS 1.0」「TLS 1.1」でTwitter APIへ接続できなくなり「TLS 1.2」が必須となった件を解決

巷を一部賑わせているこの話題ですが、私が保有してるサーバでも一部のものでだけ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投稿が出来るようになりました!

(他のサーバではずっと普通に投稿出来てるのは何故だろう・・・まあいいや)

1 Star2 Stars3 Stars4 Stars5 Stars (まだ投票されていません)
Loading...

    コメント