О проблеме с открытием сайтов на различных устройствах в связи окончанием срока действия сертификата Let’s Encrypt IdenTrust DST Root CA X3, а также о способах ее решения я писал в этой статье. И если в случае с компьютером все решается просто и быстро, то на других устройствах — телефонах, планшетах, телевизорах и т.п. — исправить ситуацию иногда довольно сложно.
Например, совсем недавно столкнулся с невозможностью открыть некоторые сайты во встроенном браузере на телевизоре LG, работающем под управлением WebOS. Причина та же — устаревший сертификат и отсутствие нового. Несмотря на то, что телевизор периодически получает обновления своего ПО, производитель почему-то не торопится включать в эти обновления новые сертификаты безопасности. Что делать? Придется решать проблему самостоятельно.
Как всегда, поиск в интернете принес определенные результаты, но на этот раз они были не утешительные. Часть заявлений сводилась к тому, что самостоятельно решить проблему нельзя никоим образом, это может сделать только производитель. Вторая же часть описывала довольно трудоемкий и малопонятный процесс взлома телевизора и модификации его программной начинки. Впрочем, почитав разные источники и немного разобравшись в предлагаемых способах обновления сертификатов, я пришел к выводу, что все не так уж и сложно, и поэтому решил попробовать.
Далее я постараюсь как можно более просто и понятно объяснить, как обновить сертификаты безопасности на телевизорах LG под управлением WebOS. Основным источником информации для меня послужила вот эта тема на специализированном форуме, которая, в свою очередь, ссылается на первоисточник с другого известного форума. Под спойлерами буду прятать дополнительную информацию, которую можно пропустить.
Инструкция по обновлению сертификатов Let’s Encrypt на ТВ LG под управлением WebOS 3.5 или новее
Нам потребуется:
- Сам телевизор, подключенный к интернету любым способом (WiFi или кабель)
- Компьютер, подключенный к той же локальной сети, что и телевизор
- Программа для подключения по протоколу Telnet или SSH, например, PuTTY
Также узнайте версию WebOS, установленную на ТВ — от нее будут зависеть некоторые дальнейшие действия. Узнать версию можно в меню Настройки -> Расширенные настройки -> Общие -> Сведения о телевизоре -> Информация о телевизоре. Будьте внимательны: на шаге “Сведения о телевизоре” высветится поле “Версия ПО”, но это не то, что нам нужно. Версия операционной системы будет в поле “Версия телевизора webOS” и будет выглядеть примерно так: 3.9.0-62906.
Шаг первый: получаем root-права
Для того, чтобы иметь возможность что-то исправлять в файловой системе или программном коде телевизора, нам необходимо получить так называемые root-права, то есть права на полный доступ к установленной операционной системе. Без этого ничего сделать с сертификатами мы не сможем.
Многие устройства для повседневного использования работают под управлением заложенного в них производителем программного обеспечения (ПО). Как правило, доступ пользователя к программному обеспечению устройства не предусматривается, не говоря уже о возможности его изменения. По этой причине производители всячески стараются защитить устройство от редактирования, а иногда даже и от просмотра его программной начинки. Но в некоторых случаях, например, сервисным инженерам при ремонте прибора требуется полный доступ к ПО. По своей сути, получение root-прав или рутирование устройства — это получение полного доступа к заложенному в нем ПО с возможностью его изменения. В связи с усилиями производителей по защите устройств от взлома получение рут-прав обычно не отличается простотой и зачастую использует найденные уязвимости в защите системы.
В интернете можно найти несколько способов получения root-прав для разных версий WebOS, но самый простой с точки зрения малоподготовленного пользователя — это использование уже готового инструмента. В моем случае это был rootmy.tv, почитать о нем можно здесь (описание на английском). Итак, приступаем:
- Включаем телевизор, запускаем на нем браузер, заходим по адресу https://rootmy.tv
- После загрузки страницы сдвигаем вправо слайдер “slide to root”. Его можно сдвинуть подключенной к ТВ мышкой или с помощью пульта Magic Remote. Если у вас обычный пульт, просто нажмите на нем цифру 5.
- Подтвердите появившееся предупреждение о безопасности.
После этих действий запустится автоматическое получение рут-прав, описание текущих стадий будет отображаться на экране. В процессе работы телевизор будет один или два раза перезагружен. В редких случаях ТВ вместо перезагрузки может выключиться, тогда его надо просто снова включить пультом. Вместе с получением рут-прав на ТВ будет также установлено приложение Homebrew Channel.
По завершении работы (весь процесс занял около минуты) ТВ предоставляет возможность неавторизованного доступа к своей операционной системе по протоколу Telnet. Для переключения на защищенный протокол SSH надо зайти в приложения, найти и запустить новое приложение Homebrew Channel, зайти в его настройки (значок в виде шестеренки в заголовке), включить протокол SSH и отключить протокол Telnet. Там же в настройках желательно отключить возможность автоматического обновления системы (Block system updates), чтобы не потерять в дальнейшем рут-права. После изменения настроек ТВ следует еще раз перезагрузить, для этого выберите пункт меню System reboot.
Подключаемся к ТВ с компьютера по протоколу SSH
Теперь мы можем управлять нашим ТВ с компьютера. Чтобы получить к нему доступ, делаем следующее:
- Узнаем IP-адрес телевизора. В зависимости от модели телевизора его можно найти в меню
Настройки -> Основные -> Сеть -> Состояние сети -> Настройки IP
или Настройки -> Сеть -> Проводное подключение -> Дополнительные настройки
или Настройки -> Сеть -> Подключение к сети Wi-Fi -> Дополнительные настройки Wi-Fi
- Запускаем программу PuTTY на компьютере, подключенном к той же сети, что и ТВ (программу скачиваем здесь).
- Вводим в поле Host Name (or IP address) адрес нашего ТВ, выбираем Connection type SSH (если после получения рут-прав не отключали протокол Telnet на ТВ, то можно выбрать Other – Telnet).
- Нажимаем кнопку Open.
Откроется окно терминала, в котором можно вводить команды для управления телевизором. Первым делом при подключении по SSH необходимо ввести имя пользователя и пароль. По умолчанию после получения рут-прав через rootmy.tv имя пользователя root
, пароль alpine
. При вводе пароля нажимаемые символы не отображаются, даже в виде “звездочек”. Подтверждение набора осуществляем клавишей Enter.
Обновляем сертификаты безопасности на ТВ
Теперь пошагово в терминале PuTTY задаем приведенные ниже команды и подтверждаем каждую нажатием клавиши Enter. Для ускорения работы и исключения ошибки в написании команд рекомендую полностью копировать текст команды и вставлять его в терминал. Копировать можете любым удобным вам способом (например, Ctrl+V), а вставлять в окно терминала нужно нажатием правой кнопки мыши, так как клавиатурные сокращения в нем не работают. По возможности буду приводить описание действия каждой команды.
1. Создаем на ТВ новую папку для размещения сертификатов
mkdir /media/cryptofs/root/
2. Копируем все содержимое папки /etc/ в нашу папку
cp -a /etc/ /media/cryptofs/root/
3. Копируем также папку с сертификатами в нашу папку
cp -a /usr/share/ca-certificates/ /media/cryptofs/root/ca-certificates/
3.1. Если у вас версия WebOS от 3.5 до 3.9 включительно, то копируем отдельно сертификаты браузера. Для других версий WebOS это делать не нужно
cp -a /var/palm/jail/com.webos.app.browser/usr/share/ca-certificates/ /media/cryptofs/root/ca-certificates_browser/
4. Запускаем текстовый редактор vi и открываем в нем файл со списком сертификатов
vi /media/cryptofs/root/etc/ca-certificates.conf
После этого на экране терминала отобразится содержимое файла ca-certificates.conf, а именно список установленных на устройстве сертификатов. Редактирование содержимого ведется почти как в обычном текстовом редакторе, но есть и отличия.
Чтобы лучше разобраться с особенностями редактора vi, прочтите небольшую инструкцию. Скорее всего, она вам не понадобится, просто запомните основные действия:
- для перемещения по тексту и прокрутки экрана используем клавиши со стрелками;
- подведя курсор к нужному месту, входим в режим редактирования, нажав клавишу i;
- печатаем нужный текст;
- для выхода из режима редактирования с сохранением надо нажать Esc, а затем ZZ (два раза клавишу z с шифтом);
- для выхода без сохранения нажимаем Esc, затем клавишу : (двоеточие, нажимаем с шифтом, иначе введем точку с запятой), затем q (уже без шифта) и Enter.
5. Находим в тексте строку DST_Root_CA_X3.crt, переводим курсор в ее начало, нажимаем i для входа в режим редактирования и ставим перед строкой восклицательный знак (должно получиться !DST_Root_CA_X3.crt
). Это означает, что сертификат не будет использоваться. Обратите внимание, что некоторые другие сертификаты тоже обозначены восклицательным знаком, то есть уже устарели.
6. Переходим в конец любой строки, нажимаем Enter для ввода новой строки и в ней печатаем:
mozilla/ISRG_Root_X1.crt
Редактирование файла закончено, нажимаем Esc и ZZ для сохранения и выхода из редактора.
7. Скачиваем из интернета новый сертификат безопасности и помещаем его в нашу папку с сертификатами
curl -k https://letsencrypt.org/certs/isrgrootx1.pem.txt | tee /media/cryptofs/root/ca-certificates/mozilla/ISRG_Root_X1.crt
8. Подключаем наши новые папки вместо старых
mount -o bind /media/cryptofs/root/etc /etc
mount -o bind /media/cryptofs/root/ca-certificates/ /usr/share/ca-certificates
9. Задаем команду для принудительного обновления сертификатов
update-ca-certificates
10. Если у вас версия WebOS от 3.5 до 3.9 включительно, то:
10.1. переходим в папку с сертификатами браузера
cd /media/cryptofs/root/ca-certificates_browser
10.2. удаляем старый сертификат
rm DST_Root_CA_X3.crt
10.3. закачиваем в папку новый сертификат
curl -k https://letsencrypt.org/certs/isrgrootx1.pem.txt | tee /media/cryptofs/root/ca-certificates_browser/mozilla/ISRG_Root_X1.crt
11. Теперь нужно отредактировать скрипт, который выполняется каждый раз при включении ТВ. Для этого снова используем редактор vi
vi /media/cryptofs/apps/usr/palm/services/com.palmdts.devmode.service/start-devmode.sh
Устанавливаем курсор клавишами со стрелками после строки /bin/bash
или в другое выбранное место скрипта (подробности под спойлером), нажимаем i для входа в режим редактирования и добавляем код:
# Set new certificates
mount -o bind /media/cryptofs/root/etc /etc
mount -o bind /media/cryptofs/root/ca-certificates/ /usr/share/ca-certificates
Будьте внимательны: при получении рут-прав через rootmy.tv, отключении автообновлений системы и применении прочих настроек через приложение Homebrew Channel содержимое скрипта меняется. В частности, там могут присутствовать условные операторы ветвления if
, и в зависимости от условия код в разных местах скрипта будет работать или игнорироваться. Поэтому необходимо правильно выбрать место для вставки команды на использование обновленных сертификатов.
Вставку новых команд желательно сделать перед строкой telnetd -l /bin/sh
, но таких строк в скрипте может быть несколько. Поэтому можно либо вставить перед каждой найденной, либо найти нужную и вставить только перед ней. Или еще лучше — вставить команды до оператора if
, сразу после строки /bin/bash
.
11.1. Если у вас версия WebOS от 3.5 до 3.9 включительно, добавляем после указанных выше строк еще две:
sleep 50
mount -o bind /media/cryptofs/root/ca-certificates_browser/ /var/palm/jail/com.webos.app.browser/usr/share/ca-certificates/
На скриншотах видно, что в скрипте имеются операторы ветвления, так что надо правильно выбрать место вставки. Например, в самом начале скрипта идет проверка на наличие файла-флага, используемого для восстановления работы ТВ при сбое в работе скрипта. Соответственно, команды между строками if и else будут выполнены только в случае сбоя.
А вот после строки else следуют команды, которые работают в нормальном режиме загрузки. Значит, сюда и надо добавлять наши команды. На скрине видно, что нужная нам секция # Set new certificates
добавлена перед секцией # Block software update service
, отвечающей за блокировку автообновления системы.
Вставленные команды будут срабатывать при каждом включении телевизора и монтировать созданные нами папки с сертификатами в качестве стандартных системных папок.
Не забываем сохранить изменения в скрипте и выйти из редактора vi нажатием последовательности Esc + ZZ.
12. Вводим команду на перезагрузку ТВ
reboot
После перезагрузки телевизора открываем на нем браузер и вводим адрес сайта, который раньше выдавал ошибку из-за просроченного сертификата безопасности. Если сайт открывается, поздравляю: все прошло удачно!
1. На тематических форумах, где обсуждалась описываемая проблема, встречаются рекомендации по установке еще двух сертификатов — ISRG_Root_X2.crt и Lets_Encrypt-R3.crt, но никто пока не сталкивался с тем, чтобы без них проблема не исчезала. Поэтому их не добавляем.
2. Если у вас возникают какие-то вопросы, почитайте источники, ссылки на которые приведены в начале статьи.
3. Если в процессе работы с PuTTY пропадет сетевое соединение, телевизор вдруг перейдет в спящий режим или отключится, не пугайтесь. Запомните последнюю выполненную команду, закройте программу PuTTY, включите ТВ, запустите PuTTY, подключитесь к ТВ, введите логин и пароль, а затем продолжите ввод команд со следующего пункта. Если отключение произошло при редактировании файла до его сохранения (пункты 4-6 или 11), то начните редактировать заново (пункт 4 или 11).
4. Ну и самое главное — помните, что все действия по модификации ПО вашего телевизора вы выполняете на свой страх и риск. Даже получение рут-прав может служить причиной для отказа в гарантийном обслуживании.
За время, прошедшее с момента написания этой статьи, у меня появилась новая информация о некоторых особенностях добавления сертификатов на телевизоры LG. Этой информацией я решил поделиться с читателями.
После получения рут-прав через сервис rootmy.tv мой телевизор два раза переходил в режим восстановления. Оба раза это случалось после отключения электропитания. В режиме восстановления на экране ТВ каждые 15 секунд появляется сообщение
Failsafe mode! Open telnet and remove /var/luna/preferences/webosbrew_failsafe
Во всем остальном ТВ функционировал, как положено. Поэтому было решено просто убрать сообщение, для чего нужно удалить создаваемый для режима восстановления файл-флаг. Делается это следующим образом:
1. Запускаете PuTTY и подключаетесь к ТВ через протокол Telnet (SSH в режиме восстановления не работает).
2. Вводите команду
rm /var/luna/preferences/webosbrew_failsafe
и жмете на Enter. Таким образом удаляется файл, служащий признаком режима восстановления.
3. Вводите команду
reboot
и жмете на Enter. Телевизор перезагрузится, сообщение о режиме восстановления должно исчезнуть.
Для выхода из режима восстановления можно воспользоваться также встроенным telnet-клиентом Windows, подробности в этой статье. Кроме того, можно отключить режим восстановления через меню приложения Homebrew.
Также на некоторых моделях ТВ LG с версией WebOS 3.9 и меньше невозможно найти и заменить сертификаты браузера. В результате команды, описанные в пунктах 3.1 или 11.1 этой статьи, выполняются с ошибкой и реальная замена сертификатов не происходит. Дело в том, что нужные папки создаются динамически только при запуске браузера, поэтому при закрытом браузере подменить сертификаты не удается. В качестве решения предлагается добавить в стартовый скрипт команду запуска браузера в скрытом режиме, что позволяет затем проделать вышеописанные манипуляции для подмены сертификатов.
То есть, если при выполнении пункта 3.1 этой статьи вы получили сообщение об ошибке, то продолжайте выполнять остальные команды, а в пункте 11 самой первой командой вставьте
luna-send -n 1 -f luna://com.webos.applicationManager/launch '{"id": "com.webos.app.browser", "launchHidden":true, "params":{}}'
и потом все остальные, которые там приведены.
После этого перезапустите ТВ и повторите выполнение пунктов 3.1 и 10 (со всеми подпунктами). Затем снова перезагрузите ТВ.
На практике данную рекомендацию я не проверял, сведения взяты из этого источника.
ничего не понятно !!!
что делать если на пятом пункте не кликабельно esc и zz?
Если в пятом пункте вам удалось поменять текст, значит, осталось сохранить изменения и выйти из редактора. Но редактор vi довольно сложный, в зависимости от того, в каком режиме его работы вы находитесь, могут понадобиться разные нажатия клавиш для сохранения. Попробуйте последовательные нажатия клавиш Esc ZZ (обратите внимание, что Z надо вводить в верхнем регистре, то есть одновременно с нажатой клавишей Shift либо при предварительно включенном режиме CapsLock, пробелы вводить не надо), если не получается, тогда Esc Esc ZZ, или можно попробовать просто ZZ, а еще для выхода и сохранения есть комбинация :wq (двоеточие, затем буквы w и q в нижнем регистре). Кратко о работе с редактором vi можно почитать здесь.
не могу зайти в учетную запиь