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

スポンサーリンク
アプリ開発
スポンサーリンク
↑管理人が個人でUnity+Live2Dで作成しているスマホゲームです

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

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

1 Star2 Stars3 Stars4 Stars5 Stars (まだ投票されていません)
読み込み中...

コメント

広告ブロッカーを無効にしてください。

タイトルとURLをコピーしました