現在、レンタルサーバーにCORESERVERを使っている。core-miniなので月額換算で200円という最底辺だが、幸い、トラフィックが小さいのであまり問題はない。

ところで、今回coreserverでPHPのcurlモジュールを利用してflickrの画像をダウンロードする必要があったのだが、エラーがでてダウンロードできない問題が発生した。問題を調査したところ、どうやらSSL関連であるらしい。めんどくせぇ。

statickflickr.comはsan

yimg.com

なんでエラーになるのか見るためにブラウザで証明書を覗いてみた。すると、*statickflickr.comはSubject Alt Nameにあった。どうやら、curlのSNIが怪しい。

検索してみたところ、cURLは7.18.1以上でSNIに対応しているらしい。

Using a version of Curl that supports it, at least 7.18.1, according to the change logs.
Using a version of Curl compiled against a library that supports SNI, e.g. OpenSSL 0.9.8j (depending on the compilation options some older versions).
Using TLS 1.0 at least (not SSLv3).

早速phpinfo();してみたら、coreserverのcURLモジュールは 7.16.3 だった。はー辛い。

ということで、PHPのcURLを使う場合、証明書の検証を無視する必要がある。これはsetoptでCURLOPT_SSL_VERIFYPEERをFALSEに設定すればよい。

CURLOPT_SSL_VERIFYPEER FALSE を設定すると、cURL はサーバー証明書の検証を行いません。 別の証明書を CURLOPT_CAINFO オプションで 指定するか、CURLOPT_CAPATH オプションで 証明ディレクトリを指定します。 cURL 7.10 以降、デフォルト値は TRUE です。また、 cURL 7.10 以降、デフォルトでインストールされています。

これで、とりあえず、エラーは出なくなった。これでいいのか?という疑問はけどね。共有レンタルサーバーはこういう時不便だね。