私のPHPアプリでは、PHPのCURLとopensslを使用して、SOAPを使用して接続および通信します。これまで、リモートサーバーはSSLおよびTLSをサポートしていましたが、 TLSのみを使用し、SSLは1月末までサポートされます。
以下を追加してコードを変更しました:
curl_setopt($objCurl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
理論的には、curlにTLSv1.2を使用させる必要があります。
しかし、それは理論です-実際にTLSを使用していることを確認する必要があります-そのための方法はありますか? curl_getinfo()と呼ばれるメソッドがありますが、それが返す情報は私には役に立ちません:
[url] => https://www.example.com/soap/MessagingPort
[content_type] => text/xml;charset=utf-8
[http_code] => 200
[header_size] => 293
[request_size] => 882
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.164487
[namelookup_time] => 3.4E-5
[connect_time] => 3.4E-5
[pretransfer_time] => 0.000122
[size_upload] => 604
[size_download] => 178
[speed_download] => 1082
[speed_upload] => 3672
[download_content_length] => 178
[upload_content_length] => 604
[starttransfer_time] => 0.164477
[redirect_time] => 0
事前に大きな感謝
簡易回答
https://www.howsmyssl.com/ へのcurlでリクエストを行う
<?php
$ch = curl_init('https://www.howsmyssl.com/a/check');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
$json = json_decode($data);
echo $json->tls_version;
接続に使用されたTLSバージョンが出力されます。
より深く掘る
Curlは、セキュアな接続のネゴシエーションを行うために、基礎となるOpenSSL(またはNSS)ライブラリに依存しています。したがって、ここで尋ねるべき正しい質問は、OpenSSLライブラリが何ができるかだと思います。 TLS接続を処理できる場合、curlはTLS接続を処理できます。
それでは、openssl(またはNSS)ライブラリが何ができるかをどうやって理解するのでしょうか?
<?php
$curl_info = curl_version();
echo $curl_info['ssl_version'];
次のようなものをダンプします
OpenSSL/1.0.1k
次に、そのバージョンのリリースノートを参照して、TLSサポートが含まれているかどうかを確認します。
OpenSSLリリースノート- https://www.openssl.org/news/changelog.html
NSSリリースノート- https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_Releases
スポイラーアラート
https://tlstest.Paypal.com を使用します。
例えば:
$ curl https://tlstest.Paypal.com/
ERROR! Connection is using TLS version lesser than 1.2. Please use TLS1.2
$ ./src/curl https://tlstest.Paypal.com/
Paypal_Connection_OK