Илдар Posted October 29, 2019 Share Posted October 29, 2019 Известно, что в отличие от многих других сайтов, 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 как-то криво откомпилирован, либо его версия под линукс работает некорректно. Что тут можно сделать? Quote Link to comment Share on other sites More sharing options...
Илдар Posted October 29, 2019 Author Share Posted October 29, 2019 Добавлю также, что проблема очевидно не в тестовом скрипте (способе доступа к сайту), т.к. споткнулся на этом composer, который пытался скачать зависимости. Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted October 30, 2019 Share Posted October 30, 2019 Entware ≠ Debian. Это вопрос конфигурирования пакетов на роутере. Если хотите аналогичного поведения, посмотрите на своём десктопе секцию default_conf в /etc/ssl/openssl.cnf и соответвующим образом поправьте в Entware /opt/etc/ssl/openssl.cnf. Quote Link to comment Share on other sites More sharing options...
Илдар Posted October 30, 2019 Author Share Posted October 30, 2019 Не очень понятно, почему вопрос конфигурирования OpenSSL, если другие утилиты, его использующие (curl например) коннектятся корректно. Десктоп в моём случае = windows, там есть только идущий вместе с PHP libssl-1_1.dll без файлов конфигурации SSL и с пустой секцией по openssl в php.ini т.е. никаких настроек. Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted October 30, 2019 Share Posted October 30, 2019 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. Quote Link to comment Share on other sites More sharing options...
Илдар Posted October 30, 2019 Author Share Posted October 30, 2019 добавил в начало файла /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 Однако же, ничего не изменилось. Проблема так и осталась. Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted October 30, 2019 Share Posted October 30, 2019 Почему в начало? Посмотрите как это сделано в том же Debian файлом patches\Set-systemwide-default-settings-for-libssl-users.patch В PHP-скриптах оставьте вместо "tlsv1.2" просто "tls". Придётся последовательно разбираться в вопросе, потому что если копипастить без понимая, то ничего не выйдет. Quote Link to comment Share on other sites More sharing options...
Илдар Posted October 30, 2019 Author Share Posted October 30, 2019 отлично, сработало. приложу сюда файл, в следующий раз когда придётся фактори резет делать, пригодится. openssl.cnf Quote Link to comment Share on other sites More sharing options...
Илдар Posted October 30, 2019 Author Share Posted October 30, 2019 Однако, для понимания, почему Цитата В PHP-скриптах оставьте вместо "tlsv1.2" просто "tls" ? Смутно представляю компиляцию PHP и связь с библиотеками, неужели всё же он был сконфигурирован с доступом к старым хидерам каким-то? Ведь на винде работает прекрасно и с tlsv1.2, а на роутере только с tls заработал, хотя версия точно такая же. Непонятно почему так. Quote Link to comment Share on other sites More sharing options...
Илдар Posted November 2, 2019 Author Share Posted November 2, 2019 На самом деле проблема не решилась, так как для других сайтов и способов доступа опять возникают эта и подобные ошибки: OpenSSL Error messages: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure Жду пересборку последней версии PHP с корректными хидерами и версией OpenSSL. С этой версией PHP невозможна нормальная работа с интернетом. Quote Link to comment Share on other sites More sharing options...
zyxmon Posted November 18, 2019 Share Posted November 18, 2019 В 02.11.2019 в 09:24, Илдар сказал: Жду пересборку последней версии PHP с корректными хидерами и версией OpenSSL. php собирается с корректными хедерами и версией openssl. Версия php будет обновлена после того, как это сделают в openwrt, и будет собрана с теми же опциями и хедерами, что и в openwrt. Quote Link to comment Share on other sites More sharing options...
Илдар Posted November 18, 2019 Author Share Posted November 18, 2019 Цитата 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 ~ # Quote Link to comment Share on other sites More sharing options...
zyxmon Posted November 18, 2019 Share Posted November 18, 2019 Тут с пакетами проблемы не вижу. Значит, как выше посоветовали В 30.10.2019 в 16:42, Александр Рыжов сказал: Придётся последовательно разбираться в вопросе, потому что если копипастить без понимая, то ничего не выйдет. Quote Link to comment Share on other sites More sharing options...
Илдар Posted November 18, 2019 Author Share Posted November 18, 2019 (edited) Я не разберусь, т.к. профессионально далёк от этой области. Мне проще использовать другие устройства без OPKG, на которых нет такой проблемы. Edited November 18, 2019 by Илдар Quote Link to comment Share on other sites More sharing options...
TheBB Posted November 27, 2019 Share Posted November 27, 2019 Возможно, наш случай https://github.com/openwrt/packages/pull/10639. Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted November 27, 2019 Share Posted November 27, 2019 Скорее всего нет. Если бы у нас не собирался соответствующий deprecated openssl API, то его бы не возможно было заставить работать способом, описанным выше. Quote Link to comment Share on other sites More sharing options...
TheBB Posted November 27, 2019 Share Posted November 27, 2019 /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 # если оно, надо ковырять патч Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted November 27, 2019 Share Posted November 27, 2019 Да, оно. Раз до ответов 200/403 дошло, то TLS-соединение установилось. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.