30 сентября в 14.01 по Гринвичу (17.01 мск) у миллионов пользователей по всему миру начались проблемы с доступом к интернету. В этот момент закончится срок действия цифрового корневого сертификата IdenTrust DST Root CA X3. Особенно это затрагивает smarttv см. https://iz.ru/1228877/2021-09-30/milliony-ustroistv-mogut-lishitsia-seti-iz-za-istecheniia-sertifikata-shifrovaniia Можно ли исправить проблему имея root? Я пошел таким путем, но еще до финиша не добрался.
Решение проблемы с сертификатами
Сертификаты вроде бы лежат в /usr/share/ca-certificates/mozilla/ в телнете даем команду cd /usr/share/ca-certificates/mozilla/ далее проверяем ls - у меня там лежит куча сертификатов
Новый сертификат можно взять https://letsencrypt.org/certs/isrgrootx1.pem.txt его скачать и записать mozilla/ISRG_Root_X1.crt под именем ISRG_Root_X1.crt далее в файл /etc/ca-certificates.confдобавим строчку строчку: mozilla/ISRG_Root_X1.crt
но дело может быть хуже, когда сертификат есть, а сайты не работают. Проверяем версию командой openssl version В выводе должна быть версия 1.1.0 или новее! у меня ТВ 2018 года и ответ
Видим виновника торжества вот этот сертификат mozilla/DST_Root_CA_X3.crt Отредактируем файл vi /etc/ca-certificates.conf, где изменим строчку с этим сертификатом на
! mozilla/DST_Root_CA_X3.crt
Далее, необходимо выполнить команду: update-ca-certificates
Я слышал, что OpenSSL 1.0.2 можно исправить вручную, установив флаг X509_V_FLAG_TRUSTED_FIRST. Этот флаг не установлен по умолчанию в 1.0.2, но вы можете сделать это в своих клиентских приложениях. В версии 1.1.0 или новее это флаг установлен по умолчанию. В оригинале про это написано вот здесь https://www.openssl.org/blog/blog/2021/09/13/LetsEncryptRootCertExpire/
Попробовал у себя. Удаление сертификата прошло нормально. У меня etc ранее был переведен из ридонли, в нормальный режим и поэтому проблем не возникло. Кто не знает как, скачайте инструкцию получения root, там написано как etc открыть. А вот с добавлением нового сертификата получил ошибку tee: /usr/share/ca-certificates/mozilla/ISRG_Root_X1.crt: Read-only file system
Надо вначале сделать тоже самое, что с etc, хотя можно только один каталог с сертификатами открыть и уже потом скачать, записать, проапдейтить. Пока не делал. Удаление старого сертификата ни как мне не помогло, разве, что теперь не говорит, что он просрочен, но не фига не открывает. Но это еще не все, надо установить флаг X509_V_FLAG_TRUSTED_FIRST.
p.s. Для ТВ до 2017 года достаточно только удалить старый сертификат, а именно ! mozilla/DST_Root_CA_X3.crt Далее, необходимо выполнить команду: update-ca-certificates
Vasil На экране ТВ появляется сообщение "Сертификат сервера не является надежным. Код ошибки -501"
foto2.jpg (38.66 КБ) Просмотров: 13208
1. Исчезает часть картинок (логотипов) в программах. Я покажу на пример Dstore vip, что начинает не так работать. Так в разделе radio нет логотипа радио ЗайцевFM, VseFM т. е. те, сайты, что используют сертификаты некоммерческого центра сертификации (сертификаты TLS сейчас используют 260 миллионам веб-сайтов.) kinopub. некоторые порталы в playfork, рут маркет и т. п со старый сертификатом
foto1.jpg (166.85 КБ) Просмотров: 13208
после обновления сертификата
логотипы.png (1.42 МБ) Просмотров: 13294
2. При запуске виджетов, что по https работают и так же сертификаты этого центра, ТВ вываливается с сообщением ошибки сети, либо с информацией что действие сертификата еще не началось или уже закончилось. 3. При запуске потоков (звук или видео) аналогично падает в экран ошибки сети или на неверный сертификат. Если с картинками не так страшно, нет и фиг с ними, то ни видео, ни радио с этих сайтов не посмотреть
После обновления сертификата все работает как надо. Изложенные шаги выше верны и приводят к исправлению ситуации.
Добавлено спустя 13 минут 1 секунду:
Уточню, что надо делать на ТВ с root, чтобы обновить сертификат a) Создаем папку /mozilla/, туда скопируем все из usr/share/ca-certificates/mozilla/
mount -o bind /media/cryptofs/root/mozilla/ /usr/share/ca-certificates/mozilla/
перед командой telnetd -l /bin/sh д) Отредактируем записи в файле /etc/ca-certificates.confдобавим строчку строчку: mozilla/ISRG_Root_X1.crt и пометим старый сертификат на удаление ! mozilla/DST_Root_CA_X3.crt командой vi /etc/ca-certificates.conf е) Произведем обновление сертификатов командой update-ca-certificates ж) перезапустим систему командой reboot
Если etc у вас read only (у меня был открыт в момент получения root), его тоже надо подменить etc надо так же подменить.
1. Создаем папку, туда скопируем все из /etc/ (/etc/ -)
1. Подключиться к ТВ по ssh или telnet 2. mkdir /media/cryptofs/root/ - создать папку root 3. Скачать сертификат: curl -k https://letsencrypt.org/certs/isrgrootx1.pem.txt | tee /media/cryptofs/root/ISRG_Root_X1.crt
4. Закрепляем изменения в start-devmode.sh: vi /media/cryptofs/apps/usr/palm/services/com.palmdts.devmode.service/start-devmode.sh Добавляем перед командой telnetd -l /bin/sh строчку: mount -o bind /media/cryptofs/root/ISRG_Root_X1.crt /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt
5.Reboot (Для надежности на пару сек выдернуть из розетки)
WEB OS 3.4 (2017 год) Версия OpenSSL: OpenSSL 1.0.1p 9 Jul 2015 update-ca-certificates выбивает ошибку /usr/sbin/update-ca-certificates: line 214: c_rehash: not found и как следствие обновление не происходит. Начало решения проблемы
#! /bin/sh # # Ben Secrest <blsecres@gmail.com> # # sh c_rehash script, scan all files in a directory # and add symbolic links to their hash values. # # based on the c_rehash perl script distributed with openssl # # LICENSE: See OpenSSL license # ^^acceptable? ^^ #
# check to see if a file is a certificate file or a CRL file # arguments: # 1.the filename to be scanned # returns: # bitfield of file type; uses ${IS_CERT} and ${IS_CRL} # check_file () { local IS_TYPE=0
# make IFS a newline so we can process grep output line by line local OLDIFS=${IFS} IFS=$ (printf "\n" ;)
# XXX: could be more efficient to have two 'grep -m' but is -m portable? for LINE in $ (grep '^-----BEGIN. *-----' ${1}) do if echo ${LINE} \ | grep -q -E '^-----BEGIN (X509 |TRUSTED)? CERTIFICATE-----' then IS_TYPE=$ ((${IS_TYPE} | ${IS_CERT}))
if [ $ ((${IS_TYPE} & ${IS_CRL})) -ne 0 ] then break fi elif echo ${LINE} | grep -q '^-----BEGIN X509 CRL-----' then IS_TYPE=$ ((${IS_TYPE} | ${IS_CRL}))
if [ $ ((${IS_TYPE} & ${IS_CERT})) -ne 0 ] then break fi fi done
# restore IFS IFS=${OLDIFS}
return ${IS_TYPE} }
# # use openssl to fingerprint a file # arguments: # 1.the filename to fingerprint # 2.the method to use (x509, crl) # returns: # none # assumptions: # user will capture output from last stage of pipeline # fingerprint () { ${SSL_CMD} ${2} -fingerprint -noout -in ${1} | sed 's/^. *=//' | tr -d ':' }
# # link_hash - create links to certificate files # arguments: # 1.the filename to create a link for # 2.the type of certificate being linked (x509, crl) # returns: # 0 on success, 1 otherwise # link_hash () { local FINGERPRINT=$ (fingerprint ${1} ${2}) local HASH=$ (${SSL_CMD} ${2} -hash -noout -in ${1}) local SUFFIX=0 local LINKFILE='' local TAG=''
if [ ${2} = "crl" ] then TAG='r' fi
LINKFILE=${HASH}.${TAG}${SUFFIX}
while [ -f ${LINKFILE} ] do if [ ${FINGERPRINT} = $ (fingerprint ${LINKFILE} ${2}) ] then echo "NOTE: Skipping duplicate file ${1}" >&2 return 1 fi
# assume any system with a POSIX shell will either support symlinks or # do something to handle this gracefully ln -s ${3} ${LINKFILE}
return 0 }
# hash_dir create hash links in a given directory hash_dir () { echo "Doing ${1}"
cd ${1}
ls -1 * 2>/dev/null | while read FILE do if echo ${FILE} | grep -q -E '^[[ :xdigit:]]{8}\.r? [[:digit:]]+$' \ && [ -h "${FILE}" ] then rm ${FILE} fi done
ls -1 *.pem *.cer *.crt *.crl 2>/dev/null | while read FILE do REAL_FILE=${FILE} # if we run on build host then get to the real files in rootfs if [ -n "${SYSROOT}" -a -h ${FILE} ] then FILE=$ (readlink ${FILE}) # check the symlink is absolute (or dangling in other word) if [ "x/" = "x$ (echo ${FILE} | cut -c1 -) " ] then REAL_FILE=${SYSROOT}/${FILE} fi fi
check_file ${REAL_FILE} local FILE_TYPE=${? } local TYPE_STR=''
if [ $ ((${FILE_TYPE} & ${IS_CERT})) -ne 0 ] then TYPE_STR='x509' elif [ $ ((${FILE_TYPE} & ${IS_CRL})) -ne 0 ] then TYPE_STR='crl' else echo "NOTE: ${FILE} does not contain a certificate or CRL: skipping" >&2 continue fi
link_hash ${REAL_FILE} ${TYPE_STR} ${FILE} done }
# choose the name of an ssl application if [ -n "${OPENSSL}" ] then SSL_CMD=$ (which ${OPENSSL} 2>/dev/null) else SSL_CMD=/usr/bin/openssl OPENSSL=${SSL_CMD} export OPENSSL fi
# fix paths PATH=${PATH}:${DIR}/bin export PATH
# confirm existance/executability of ssl command if! [ -x ${SSL_CMD} ] then echo "${0}: rehashing skipped ('openssl' program not available) " >&2 exit 0 fi
# determine which directories to process old_IFS=$IFS if [ ${#} -gt 0 ] then IFS=':' DIRLIST=${*} elif [ -n "${SSL_CERT_DIR}" ] then DIRLIST=$SSL_CERT_DIR else DIRLIST=${DIR}/certs fi
IFS=':'
# process directories for CERT_DIR in ${DIRLIST} do if [ -d ${CERT_DIR} -a -w ${CERT_DIR} ] then IFS=$old_IFS hash_dir ${CERT_DIR} IFS=':' fi done
Да в версии WEB OS 3.4 такого файла нет Файл добавил, и дал ему права на исполнение + подмаунтил директорию bin Сертификаты теперь добавились и обновились, однако толку от этого опять нет. Через curl сайт работает, а через браузер или виджет кинопаб бьет ошибку сертификата
Проблема пока не решена.... Если появится решение добавлю сюда
Последний раз редактировалось smsbox 06 окт 2021, 14:11, всего редактировалось 5 раз(а).
Новый сертификат - это конечно хорошо, только вот у меня одна загвоздка с его установкой: /etc - Read only. Это файло /etc/ca-certificates.conf тоже куда-то копировать и биндить нужно для исправления?
RoxsAndy писал(а):Новый сертификат - это конечно хорошо, только вот у меня одна загвоздка с его установкой: /etc - Read only. Это файло /etc/ca-certificates.conf тоже куда-то копировать и биндить нужно для исправления?
etc надо так же подменить.
1. Создаем папку, туда скопируем все из /etc/ (/etc/ -)
Всем привет, WebOS 3.4 (ТВ 2017 года LG 55UH7507), заменил сертификат по инструкции (проверил несколько раз, все на нужных местах), в браузере все равно фейл (например, на сайте rezka). Подозреваю проблема в openssl, на сайте let'sencrypt пишут следущее: if clients of your API are using OpenSSL, they must use version 1.1.0 or later.In OpenSSL 1.0.x, a quirk in certificate verification means that even clients that trust ISRG Root X1 will fail when presented with the Android-compatible certificate chain we are recommending by default. А у меня версия OpenSSL 1.0.1p 9 Jul 2015 Возможно есть у кого соображения? Пробовал обновить openssl через opkg, пишет up-to-date...
smsbox Да, тут нормально! Ситуация еще больше странная... Нет, не из РФ, и резка (и другие сайты с let's encrypt) именно после 30 числа перестали работать, потому явно связанно с устареванием сертификата
hzh писал(а):Всем привет, WebOS 3.4 (ТВ 2017 года LG 55UH7507), заменил сертификат по инструкции (проверил несколько раз, все на нужных местах), в браузере все равно фейл.
Для старых ТВ до 2017 года выпуска, где установка сертификата не приводит к нормальной работе (openssl 1.0.1) кажется надо ставить другой сертификат.
Для систем не поддерживающих корневой сертификат ISRG Root X1, Let’s Encrypt удалось договориться с IdenTrust о выпуске на 3 года кросс-подписи истекшего DST Root CA X3. Таким образом, устройства даже с устаревшими версиями не будут сообщать об ошибке как минимум до 2024 года. Попробуйте установить вот этот сертификат http://dstore.lh1.in/crt