繁体   English   中英

如何设置php默认使用特定的TLS版本进行curl请求?

[英]How can I set php to default use a specific TLS version for curl requests?

在Internet上搜索时,我发现以下脚本来确定我在服务器上使用的涉及的版本:

<?php
    function get_tls_version($sslversion = null)
    {
        $c = curl_init();
        curl_setopt($c, CURLOPT_URL, "https://www.howsmyssl.com/a/check");
        curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
        if ($sslversion !== null) {
            curl_setopt($c, CURLOPT_SSLVERSION, $sslversion);
        }
        $rbody = curl_exec($c);
        if ($rbody === false) {
            $errno = curl_errno($c);
            $msg = curl_error($c);
            curl_close($c);
            return "Error! errno = " . $errno . ", msg = " . $msg;
        } else {
            $r = json_decode($rbody);
            curl_close($c);
            return $r->tls_version;
        }
    }
    echo "<pre>\n";
    echo "OS: " . PHP_OS . "\n";
    echo "uname: " . php_uname() . "\n";
    echo "PHP version: " . phpversion() . "\n";
    $curl_version = curl_version();
    echo "curl version: " . $curl_version["version"] . "\n";
    echo "SSL version: " . $curl_version["ssl_version"] . "\n";
    echo "SSL version number: " . $curl_version["ssl_version_number"] . "\n";
    echo "OPENSSL_VERSION_NUMBER: " . dechex(OPENSSL_VERSION_NUMBER) . "\n";
    echo "TLS test (default): " . get_tls_version() . "\n";
    echo "TLS test (TLS_v1): " . get_tls_version(1) . "\n";
    echo "TLS test (TLS_v1_2): " . get_tls_version(6) . "\n";
    echo "</pre>\n";
?>

该脚本提供以下结果:

OS: Linux
uname: Linux ....
PHP version: 5.6.11
curl version: 7.19.7
SSL version: NSS/3.27.1
SSL version number: 0
OPENSSL_VERSION_NUMBER: 1000105f
TLS test (default): TLS 1.0
TLS test (TLS_v1): TLS 1.2
TLS test (TLS_v1_2): TLS 1.2

请注意,我只能执行系统或软件包升级。 我在CentOS 6.6版(最终版)服务器上。

如何在PHP中设置(因为它可用)TLS测试(默认):TLS 1.0变为TLS 1.2?

我想避免设置以下内容:

 curl_setopt ($curl, CURLOPT_SSLVERSION, 6); 
 // 5 (for CURL_SSLVERSION_TLSv1_1) or 6 (for CURL_SSLVERSION_TLSv1_2)

...每次我需要在我的php项目中实例化curl。

我想覆盖php使用的默认SSLVERSION(某处,何处?)

不,没有全局选项可以强制curl使用tls1.2 / tls1.3(无全局变量,无全局函数,无全局ini配置)。 您可以修补curl扩展以满足您的要求,但是您说您在执行系统或软件包升级方面受到限制。

一种可能的方法是编写自己的curl_init ,例如:

function curl_init_tls12()
{
    $c = curl_init();
    curl_setopt($c, CURLOPT_SSLVERSION, ...);
    return $c;
}

并记住在任何地方都使用自己的curl_init_tls13

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM