Как я могу установить php по умолчанию, используя определенную версию TLS для запросов curl?

Поискав в Интернете, я нашел следующий сценарий для определения задействованных версий, которые я использую на своем сервере:

<?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 (Final).

Как установить в 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)

... каждый раз, когда мне нужно создать экземпляр curl в моем проекте php.

Я хотел бы заменить SSLVERSION по умолчанию, используемый php (где-нибудь, где?)

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
1 388
1

Ответы 1

Нет, нет глобальной опции, чтобы заставить 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.

@koalaok, если вы используете жрать, вам повезло: github.com/guzzle/guzzle/issues/652

shawn 09.01.2019 11:49

Я знал, но мне не так повезло с этим. Спасибо

koalaok 09.01.2019 11:51

Другие вопросы по теме