はじめに
WebAPIで連携しているサービスから
「TLS1.0とTLS1.1を廃止して、TLS1.2のみ対応します」
と連絡がきたので、WebAPIを呼び出しているphpのcURLがTLS1.2に対応しているか確認したいと思います。
環境
CentOS 7
php 5.4.16
cURL 7.29.0
コード
phpのcURLでYahoo!セキュリティセンターのサイトに接続してみます。
tls.php
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://security.yahoo.co.jp/news/tls12.html');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $response;
echo "\n";
echo 'status code: ' . $statusCode;
echo "\n";
?>
上のコードをコマンドラインで実行して、HTMLのレスポンスとステータスコード200が返ってくれば成功です。
$ php tls.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
:
省略
:
</body>
</html>
status code: 200
cURLはTLS1.2に対応しているのが確認できました。
TLSのバージョンを指定する
curl_setoptでTLSのバージョンを指定することもできます。
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0);
TLS1.0を指定したのでリクエストは失敗します。接続すらできないのでステータスコードは0になります。
$ php tls.php
status code: 0
以上で終わります。