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

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

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

Известно, что в отличие от многих других сайтов, 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

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

Опубликовано
3 часа назад, Илдар сказал:

Не очень понятно, почему вопрос конфигурирования 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 в 09:24, Илдар сказал:

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

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

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

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

Zyxmon:

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

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

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

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

Скрытый текст

~ # opkg list-installed
busybox - 1.31.0-1
ca-bundle - 20190110-1
coreutils - 8.30-2
coreutils-groups - 8.30-2
cron - 4.1-3
curl - 7.66.0-1
dropbear - 2019.78-2
entware-release - 1.0-2
etherwake - 1.09-5
findutils - 4.6.0-4
git - 2.22.0-1
git-http - 2.22.0-1
grep - 3.3-1
ldconfig - 2.27-8
libatomic - 7.4.0-8
libbz2 - 1.0.8-1
libc - 2.27-8
libcurl - 7.66.0-1
libdb47 - 4.7.25.4.NC-5
libexpat - 2.2.7-1
libffi - 3.2.1-3
libgcc - 7.4.0-8
libgdbm - 1.18.1-1
libgmp - 6.1.2-2
libgnutls - 3.6.9-2
libintl-full - 0.19.8.1-2
liblzma - 5.2.4-5
libncurses - 6.1-5
libncursesw - 6.1-5
libndm - 1.1.10-1a
libnettle - 3.5.1-1
libopenssl - 1.1.1d-1
libopenssl-conf - 1.1.1d-1
libpcre - 8.43-1
libpthread - 2.27-8
librt - 2.27-8
libsqlite3 - 3290000-1
libssp - 7.4.0-8
libstdcpp - 7.4.0-8
libtirpc - 1.1.4-2
libuuid - 2.34-1
libxml2 - 2.9.9-2
lighttpd - 1.4.54-1
lighttpd-mod-access - 1.4.54-1
lighttpd-mod-accesslog - 1.4.54-1
lighttpd-mod-alias - 1.4.54-1
lighttpd-mod-auth - 1.4.54-1
lighttpd-mod-authn_file - 1.4.54-1
lighttpd-mod-fastcgi - 1.4.54-1
locales - 2.27-8
msmtp - 1.8.5-2
ndmq - 1.0.2-5a
openssl-util - 1.1.1d-1
opkg - 2019-06-14-dcbc142e-1
opt-ndmsv2 - 1.0-12
perl - 5.28.1-2
perl-image-exiftool - 11.65+perl5.28-1
perlbase-base - 5.28.1-2
perlbase-bytes - 5.28.1-2
perlbase-class - 5.28.1-2
perlbase-config - 5.28.1-2
perlbase-cwd - 5.28.1-2
perlbase-dynaloader - 5.28.1-2
perlbase-encode - 5.28.1-2
perlbase-errno - 5.28.1-2
perlbase-essential - 5.28.1-2
perlbase-fcntl - 5.28.1-2
perlbase-file - 5.28.1-2
perlbase-filehandle - 5.28.1-2
perlbase-i18n - 5.28.1-2
perlbase-integer - 5.28.1-2
perlbase-io - 5.28.1-2
perlbase-list - 5.28.1-2
perlbase-locale - 5.28.1-2
perlbase-mime - 5.28.1-2
perlbase-params - 5.28.1-2
perlbase-posix - 5.28.1-2
perlbase-re - 5.28.1-2
perlbase-scalar - 5.28.1-2
perlbase-selectsaver - 5.28.1-2
perlbase-socket - 5.28.1-2
perlbase-symbol - 5.28.1-2
perlbase-tie - 5.28.1-2
perlbase-time - 5.28.1-2
perlbase-unicore - 5.28.1-2
perlbase-utf8 - 5.28.1-2
perlbase-xsloader - 5.28.1-2
php7 - 7.2.22-1
php7-cgi - 7.2.22-1
php7-cli - 7.2.22-1
php7-fpm - 7.2.22-1
php7-mod-ctype - 7.2.22-1
php7-mod-curl - 7.2.22-1
php7-mod-dom - 7.2.22-1
php7-mod-exif - 7.2.22-1
php7-mod-fileinfo - 7.2.22-1
php7-mod-gmp - 7.2.22-1
php7-mod-hash - 7.2.22-1
php7-mod-json - 7.2.22-1
php7-mod-mbstring - 7.2.22-1
php7-mod-openssl - 7.2.22-1
php7-mod-pdo - 7.2.22-1
php7-mod-pdo-sqlite - 7.2.22-1
php7-mod-phar - 7.2.22-1
php7-mod-sqlite3 - 7.2.22-1
php7-mod-tokenizer - 7.2.22-1
php7-mod-xml - 7.2.22-1
php7-mod-xmlwriter - 7.2.22-1
php7-mod-zip - 7.2.22-1
poorbox - 1.31.0-1
python3 - 3.7.4-2
python3-asyncio - 3.7.4-2
python3-base - 3.7.4-2
python3-cgi - 3.7.4-2
python3-cgitb - 3.7.4-2
python3-codecs - 3.7.4-2
python3-ctypes - 3.7.4-2
python3-dbm - 3.7.4-2
python3-decimal - 3.7.4-2
python3-distutils - 3.7.4-2
python3-email - 3.7.4-2
python3-gdbm - 3.7.4-2
python3-light - 3.7.4-2
python3-logging - 3.7.4-2
python3-lzma - 3.7.4-2
python3-multiprocessing - 3.7.4-2
python3-ncurses - 3.7.4-2
python3-openssl - 3.7.4-2
python3-pydoc - 3.7.4-2
python3-sqlite3 - 3.7.4-2
python3-unittest - 3.7.4-2
python3-urllib - 3.7.4-2
python3-xml - 3.7.4-2
terminfo - 6.1-5
zlib - 1.2.11-3
zoneinfo-asia - 2019c-1
zoneinfo-europe - 2019c-1
~ #
 

 

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

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

В 30.10.2019 в 16: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. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.