巷を一部賑わせているこの話題ですが、私が保有してるサーバでも一部のものでだけTwitter APIを使ったPHPのシステムが動かなくなりました。どうやらPHPかPHPライブラリかOpenSSLかどれかがTLS1.2に対応していないようなので色々いじってみます。
とりあえず
yum update openssl
をおもむろに実行。
21/05/20追記:CentOS6はサポート終了により、レポジトリのURLが廃止されているため
Loaded plugins: fastestmirror, security Determining fastest mirrors YumRepo Error: All mirror URLs are not using ftp, http[s] or file. Eg. Invalid release/repo/arch combination/ removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt Error: Cannot find a valid baseurl for repo: base
のようなエラーが出てしまいます。
# cd /etc/yum.repos.d # sed -i -e "s/^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo # sed -i -e "s/^#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo
というようなコマンドを入力してURLを更新してください。するとyum updateできるようになります。
ちなみに使っている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投稿が出来るようになりました!
(他のサーバではずっと普通に投稿出来てるのは何故だろう・・・まあいいや)
コメント