2016年11月18日金曜日

PHP5.4クライアントはtls1.0までという問題

未だにphp5.4という古いシステムも存在しているのですが、このときtls/ssl通信がちょっと面倒ですよね。

・php5.4のtlsは1.0までしか標準サポートしていない。
・しかし1.0は脆弱性のためサポートしているサービスが皆無に等しい。
・sslは長い間使われていて互換性のために許容しているサービスがまだ多い。

てことで、tlsではなくsslにしてあげれば今はまだ大丈夫な事がほとんど。
sslも脆弱性があるので避けるべきですが、手っ取り早く実装するために妥協します。


ソケットライブラリとして HTTP_Request2 を使った場合。

このライブラリは外部サービスと簡単に通信できるので使う人が多いはず。
ただこれは、tls固定でハードコーディングされているため、改造しないといけません。


HTTP/Request2/Adapter/Socket.php
291行目を

$remote = ((!$secure || $httpProxy || $socksProxy)? 'tcp://': 'ssl://')

tlsって文字をsslに変えるだけです。
php5.4以下ではこれをしないとtls1.0固定となり、使い物になりません。