Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

Известно, что в отличие от многих других сайтов, api.github.com разрешает доступ к себе ТОЛЬКО (не ниже) по TLS 1.2

Пример PHP скрипта, генерирующий ошибку:

<?php

$arr_hosts = array(
 'yandex.ru'
,'api.github.com'
);

foreach($arr_hosts as $host){
    print "check $host:<br/>\r\n";
    $fp = stream_socket_client("tlsv1.2://$host:443", $errno, $errstr, 30);
    if (!$fp) {
        die("Unable to connect: $errstr ($errno)");
    }
    $header = "GET / HTTP/1.0\r\nHost: $host\r\nAccept: */*\r\n\r\n";
    print $header;
    fwrite($fp, $header);
    if (!feof($fp)) {
        echo fgets($fp, 1024);
    }
    fclose($fp);

}

?>

Выдаёт ошибку "error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version" :

  Цитата
check yandex.ru:<br/>
  GET / HTTP/1.0
  Host: yandex.ru
  Accept: */*
   
  HTTP/1.1 200 Ok
  check api.github.com:<br/>
  <br />
  <b>Warning</b>: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:
  error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version in <b>/opt/share/www/test_crypto.php</b> on line <b>42</b><br />
  <br />
  <b>Warning</b>: stream_socket_client(): Failed to enable crypto in <b>/opt/share/www/test_crypto.php</b> on line <b>42</b><br />
  <br />
  <b>Warning</b>: stream_socket_client(): unable to connect to tlsv1.2://api.github.com:443 (Unknown error) in <b>/opt/share/www/test_crypto.php</b> on line <b>42</b><br />
  Unable to connect: (0)
Показать  

учитывая, что curl работает корректно

curl https://api.github.com/repos/danog/MagicalSerializer/zipball/87b6ed05a86021e9364f31133089bb83980d5e24

Поставил на десктоп PHP 7.2.22, там тестовый скрипт отрабатывает без ошибок.

, могу предположить что PHP как-то криво откомпилирован, либо его версия под линукс работает некорректно.

Что тут можно сделать?

 

Опубликовано

Добавлю также, что проблема очевидно не в тестовом скрипте (способе доступа к сайту), т.к. споткнулся на этом composer, который пытался скачать зависимости.

Опубликовано

Entware ≠ Debian. Это вопрос конфигурирования пакетов на роутере.

Если хотите аналогичного поведения, посмотрите на своём десктопе секцию default_conf в /etc/ssl/openssl.cnf и соответвующим образом поправьте в Entware /opt/etc/ssl/openssl.cnf.

Опубликовано

Не очень понятно, почему вопрос конфигурирования OpenSSL, если другие утилиты, его использующие (curl например) коннектятся корректно.

Десктоп в моём случае  = windows, там есть только идущий вместе с PHP libssl-1_1.dll без файлов конфигурации SSL и с пустой секцией по openssl в php.ini

т.е. никаких настроек.

Опубликовано
  В 30.10.2019 в 07:22, Илдар сказал:

Не очень понятно, почему вопрос конфигурирования OpenSSL, если другие утилиты, его использующие (curl например) коннектятся корректно.

Показать  

 Я в душе́ не знаю почему на предложение о renegotiation со стороны api.github.com PHP скатывается в TLS1.0, curl так не делает. Если не предлагать renegotiation (что видно в выводе openssl s_client -connect api.github.com:443 -tls1_3), то при указаниии в PHP контекста "tlsv1.3" соединение устанавливается нормально.

Опциями в /etc/ssl/openssl.cnf Debian запрещает использование всего, что хуже TLS1.2 для всех пакетов системы:

# System default
openssl_conf = default_conf
…
[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
#CipherString = DEFAULT@SECLEVEL=2

Этим и пресекаются попытки PHP скатиться в TLS1.0. Аналогичные правки вы можете сделать и на Entware.

 

Опубликовано

добавил в начало файла /opt/etc/ssl/openssl.cnf:

  Цитата

openssl_conf = default_conf

[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
 

Показать  

Однако же, ничего не изменилось.

Проблема так и осталась.

Опубликовано

Почему в начало? Посмотрите как это сделано в том же Debian файлом patches\Set-systemwide-default-settings-for-libssl-users.patch

В PHP-скриптах оставьте вместо "tlsv1.2" просто "tls".

Придётся последовательно разбираться в вопросе, потому что если копипастить без понимая, то ничего не выйдет.

Опубликовано

Однако, для понимания, почему 

  Цитата

В PHP-скриптах оставьте вместо "tlsv1.2" просто "tls"

Показать  

?

Смутно представляю компиляцию PHP и связь с библиотеками, неужели всё же он был сконфигурирован с доступом к старым хидерам каким-то?

Ведь на винде работает прекрасно и с tlsv1.2, а на роутере только с tls заработал, хотя версия точно такая же. Непонятно почему так.

Опубликовано

На самом деле проблема не решилась, так как для других сайтов и способов доступа опять возникают эта и подобные ошибки:

OpenSSL Error messages: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure

Жду пересборку последней версии PHP с корректными хидерами и версией OpenSSL.

С этой версией PHP невозможна нормальная работа с интернетом.

  • 3 недели спустя...
Опубликовано
  В 02.11.2019 в 06:24, Илдар сказал:

Жду пересборку последней версии PHP с корректными хидерами и версией OpenSSL.

Показать  

php собирается с корректными хедерами и версией openssl.

Версия php будет обновлена после того, как это сделают в openwrt, и будет собрана с теми же опциями и хедерами, что и в openwrt.

Опубликовано
  Цитата

Zyxmon:

Если хотите продолжать, то продолжайте в той теме, где начали. Приведите список установленных пакетов, укажите обновлялись ли пакеты (при обновлениях бывают ошибки, способы решения которых известны).

Приводите информацию, конфиги, а не домыслы.

Показать  

Т.к. автообновление роутера до версии 3.1.10 привело к его неработоспособности, то был сброс настроек и всё было установлено заново с нуля. 

Список установленных пакетов:

  Показать контент

 

Опубликовано

Тут с пакетами проблемы не вижу. Значит, как выше посоветовали

  В 30.10.2019 в 13:42, Александр Рыжов сказал:

Придётся последовательно разбираться в вопросе, потому что если копипастить без понимая, то ничего не выйдет.

Показать  

 

Опубликовано (изменено)

Я не разберусь, т.к. профессионально далёк от этой области.

Мне проще использовать другие устройства без OPKG, на которых нет такой проблемы.

Изменено пользователем Илдар
  • 2 недели спустя...
Опубликовано
/root # php tls.php 
check yandex.ru:<br/>
GET / HTTP/1.0
Host: yandex.ru
Accept: */*

HTTP/1.1 200 Ok
check api.github.com:<br/>
GET / HTTP/1.0
Host: api.github.com
Accept: */*

HTTP/1.0 403 Forbidden
/root #

если оно, надо ковырять патч

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.