12

PHP で (NSS を使用した) curl ライブラリを使用して、他のサーバーに接続しています。プードルの脆弱性 (ちなみに CloudFlare) が原因で宛先サーバーが SSLv3 のサポートを停止した先週までは、すべて問題ありませんでした。現在、TLS を使用して接続しようとしていますが、まだ「SSL 接続エラー」が発生しています。

私が使用しているサンプルコードがあります:

$ch = curl_init();
curl_setopt_array( $ch, array(
    CURLOPT_URL => 'https://www.lumiart.cz',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSLVERSION => 1,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_VERBOSE => true
) );
$output = curl_exec( $ch );
echo $output;

print_r( curl_getinfo( $ch ) );

echo 'error:' . curl_error( $ch );

curl_close($ch);

私の理解では、 に設定CURLOPT_SSLVERSIONすると1TLS 経由の接続が強制されるはずです。

注:私はCURLOPT_SSL_VERIFYPEER => falseデバッグのためだけに持っています。この問題を理解したら、そのままにしておくつもりはありません。

これは出力です:

Array
(
    [url] => https://www.lumiart.cz
    [content_type] => 
    [http_code] => 0
    [header_size] => 0
    [request_size] => 0
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0
    [namelookup_time] => 2.3E-5
    [connect_time] => 0.005777
    [pretransfer_time] => 0
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => -1
    [starttransfer_time] => 0
    [redirect_time] => 0
    [certinfo] => Array
        (
        )

    [primary_ip] => 2400:cb00:2048:1::681c:86f
    [redirect_url] => 
)
error:SSL connect error

これらはすべて共有ホスティング プロバイダーにあるため、php.ini の構成を変更したり、コンポーネントを更新したりすることはできません。私が持っているのは phpinfo() だけです。これらのコンポーネント バージョンでの TLS サポートを確認しましたが、問題ないはずです。以下は phpinfo の抜粋です。

PHP Version 5.4.32
System  Linux wl42-f262 2.6.32-431.5.1.el6.x86_64 #1 SMP Wed Feb 12 00:41:43 UTC 2014 x86_64

curl:
cURL support    enabled
cURL Information    7.19.7
Age 3
Features
AsynchDNS   No
Debug   No
GSS-Negotiate   Yes
IDN Yes
IPv6    Yes
Largefile   Yes
NTLM    Yes
SPNEGO  No
SSL Yes
SSPI    No
krb4    No
libz    Yes
CharConv    No
Protocols   tftp, ftp, telnet, dict, ldap, ldaps, http, file, https, ftps, scp, sftp
Host    x86_64-redhat-linux-gnu
SSL Version NSS/3.15.3
ZLib Version    1.2.3
libSSH Version  libssh2/1.4.2

その問題は TLS の代わりに SSLv3 を使用していることだと思いますが、100% 確実ではありません。私が得ているのは「SSL接続エラー」だけで、接続に使用されたSSLバージョンを見つける方法がわかりません。

どのSSLバージョンが接続に使用されているかを確認する方法はありますか? または、何か不足していますか?

4

4 に答える 4

13

私は Curl 7.21.7 と PHP 5.4.34 を持っていますが、これでうまくいくようです:

curl_setopt($curl_request, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

CURL_SSLVERSION_TLSv1 がいつ導入されたかはわかりませんが、詳細はこちらをご覧ください。

于 2014-10-31T07:46:38.377 に答える
5

私にとっての答えは、文字列の代わりに整数値を使用することでした..つまり: 変更:

curl_setopt($ch, CURLOPT_SSLVERSION_TLSv1_2);

に:

curl_setopt($ch, CURLOPT_SSLVERSION, 6);

または tlsv1_1 の場合:

curl_setopt($ch, CURLOPT_SSLVERSION, 5);

完全なリストは次のとおりです。

CURL_SSLVERSION_DEFAULT (0)
CURL_SSLVERSION_TLSv1 (1)
CURL_SSLVERSION_SSLv2 (2)
CURL_SSLVERSION_SSLv3 (3)
CURL_SSLVERSION_TLSv1_0 (4)
CURL_SSLVERSION_TLSv1_1 (5)
CURL_SSLVERSION_TLSv1_2 (6)

ちなみに私は以下を実行しています:

curl-7.19.7-46.el6.x86_64
nss-3.21.0-0.3.el6_7.x86_64
于 2016-04-08T20:40:54.167 に答える