web-dev-qa-db-ja.com

curlがTLSを使用しているかどうかを確認します

私の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

事前に大きな感謝

42
kayo

簡易回答

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

スポイラーアラート

  • opensslには、OpenSSL 1.0.1のTLS v1.1およびTLS v1.2のサポートが含まれています[2012年3月14日]
  • NSSには3.14でTLS v1.1のサポートが含まれていました
  • NSSには3.15のTLS v1.2のサポートが含まれていました
92
Jeff Richards

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
5
kbulgrien