INFRA

TwitterOAuthが使えない(サーバからhttps接続だけできない)

ローカルでは問題ないのに、ステージングだと使えない。といってもステージングと結構環境違う。 にしても、下記のようにやると、$Twitter->postのところでやたら時間かかるものの、$statusは空っぽになる。

$Twitter = new TwitterOAuth($this->api_key, $this->api_secret, $this->access_token, $this->access_secret);
$status = $Twitter->post('statuses/update', array('status' => $text));

もう5時間以上試行錯誤しているが、解決しない。色々やって、httpアクセスだとOKなんだけど、httpsだとNGなのが分かった。タイムアウトしてしまう。ニコニコ動画にhttps(SSL)接続できなかった件という記事を見つけて、curlの設定をしてみたけど、ダメだった。

CentOS release 6.4 (Final) OpenSSL 1.0.1e-fips 11 Feb 2013 PHP 5.3.28 (cli) (built: Jun 5 2014 08:13:36)

という環境です。そうだ試しに、サーバから直でアクセスしてみよう。 curl -O http://www.yahoo.com/index.html これだとすぐできる。

curl -O https://www.yahoo.com/index.html これだとダメだ。curl: (7) Failed to connect to 2406:2000:e4:200::4001: ネットワークに届きません

curl -3 —connect-timeout 10 https://api.twitter.com/1.1/statuses/update.jsonとかでもダメだ。1でも2でもダメだ。

他のサーバで試してみよう。自分のさくらVPSだと余裕で接続できるなあ。 CentOS release 6.5 (Final) OpenSSL 1.0.1e-fips 11 Feb 2013 PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57) PHP関係ないけど、ほぼ一緒やな。

curl -0 —connect-timeout 10 https://api.twitter.com/1.1/statuses/update.json {“errors”:[{“message”:“Bad Authentication data”,“code”:215}]}

curl -3 —connect-timeout 10 https://api.twitter.com/1.1/statuses/update.json curl: (35) SSL connect error

エラー自体違うもんな。SSL connect errorなど出ないからな。今困っているサーバでは、curl: (28) connect() timed out!と出るばかりである。

curl -1 —connect-timeout 10 https://api.twitter.com/1.1/statuses/update.jsonでも接続できるな。 0か1ならOKだな。http://itpro.nikkeibp.co.jp/atcl/column/14/230520/080400003/0は、HTTP 1.0で、1は、TSLバージョン1.xらしい。2、3は、SSLバージョン2と3らしい。

なんか、http://blog.wnotes.net/blog/article/php_curl_errorこのサイトに似たようなことが書いてある。俺の7時間。。これなのだろうか。とりあえずphp.infoを見てみよう。

# php -i | grep SSL
SSL => Yes
SSL Version => NSS/3.13.6.0
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.1e-fips 11 Feb 2013
OpenSSL Header Version => OpenSSL 1.0.1e-fips 11 Feb 2013
Native OpenSSL support => enabled

おお、見事にNSSになっている。これを変えてもらえれば動くのではないか。。くー俺の7時間。。

ところが、自分のサーバでphp.info見ても、

SSL => Yes
SSL Version => NSS/3.14.0.0
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.1e-fips 11 Feb 2013
OpenSSL Header Version => OpenSSL 1.0.1e-fips 11 Feb 2013
Native OpenSSL support => enabled

NSSのバージョンがちょっと新しいだけじゃないか。。くー。 じゃこれが理由じゃなさそうだな。

yum実行時に「Cannot retrieve metalink for repository: epel.」というエラーが出る場合の対応(SSL接続エラー)

このエラーが出る場合NSSのアップデートが必要なので以下のコマンドでアップデートする。 # yum —disablerepo=epel update nss

むむむ、これでアップデートしたらいいのではないか?? でも、分からない。試せないし。くやしい。