Как стать автором
Обновить
132.61

Что делать, когда истёк TLS-сертификат на ТВ-приставку

Время на прочтение8 мин
Количество просмотров9K

Chromecast второго поколения

9 марта 2025 года владельцы медиаприставок Chromecast второго поколения и Chromecast Audio столкнулись с неожиданной проблемой — все устройства прекратили работать. Как потом выяснилась, проблема была в просроченном TLS-сертификате.

Это новая причина, по которой оборудование может выйти из строя в 21 веке.

Chromecast


Chromecast — линейка недорогих цифровых медиаплееров компании Google ($35), предназначенных для воспроизведения потокового видео или аудио с помощью Wi-Fi из интернета или локальной сети. Такие приставки (донглы) обычно подключаются в разъём HDMI на телевизоре и могут транслировать видео из интернета, с компьютера или смартфона.

Первые три поколения устройств имели специализированную операционную систему на базе Chrome OS, в четвёртом поколении устройства стали базироваться на Android TV с интерфейсом Google TV.



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

6 августа 2024 года Google объявила, что прекращает производство линейки продуктов Chromecast и будет продавать устройства до тех пор, пока не исчерпает имеющиеся запасы. Компания обещала обновлять ПО для оставшихся устройств. Вместо Chromecast выпустили хаб Google TV Streamer для ТВ и умного дома за $100:


Google TV Streamer

Массовый сбой


Согласно многочисленным жалобам, у всех пострадавших в марте 2025 года наблюдались одинаковые симптомы: при попытке транслировать контент со смартфона появляется сообщение об ошибке, в котором говорится о необходимости обновления прошивки или о проблеме аутентификации. Вот одно на одно из таких сообщений:



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

Одна из теорий заключалась в том, что производитель снял с производства старые модели Chromecast. К счастью, это оказалось не так: в службе поддержки сообщали, что знают о проблеме и ждут её исправления.

Независимый технический анализ показал множество ошибок в отладочном логе chrome_debug.log такого типа:

1254:[502880:502907:0309/184942.218048:VERBOSE1:cast_socket.cc(229)] [192.168.86.26:8009, auth=SSL_VERIFIED] Connect readyState = ReadyState::NONE
1255:[502880:502907:0309/184942.218068:VERBOSE1:cast_socket.cc(389)] [192.168.86.26:8009, auth=SSL_VERIFIED] DoTcpConnect
1260:[502880:502907:0309/184942.226508:VERBOSE1:cast_socket.cc(403)] [192.168.86.26:8009, auth=SSL_VERIFIED] DoTcpConnectComplete: 0
1261:[502880:502907:0309/184942.226513:VERBOSE1:cast_socket.cc(420)] [192.168.86.26:8009, auth=SSL_VERIFIED] DoSslConnect
1266:[502880:502907:0309/184942.261447:VERBOSE1:cast_socket.cc(443)] [192.168.86.26:8009, auth=SSL_VERIFIED] DoSslConnectComplete: 0
1267:[502880:502907:0309/184942.261454:VERBOSE1:cast_socket.cc(474)] [192.168.86.26:8009, auth=SSL_VERIFIED] DoAuthChallengeSend
1268:[502880:502907:0309/184942.261458:VERBOSE1:cast_socket.cc(479)] [192.168.86.26:8009, auth=SSL_VERIFIED] Sending challenge: {source_id: sender-0, destination_id: receiver-0, namespace: urn:x-cast:com.google.cast.tp.deviceauth, payload_binary: (22 bytes)}
1269:[502880:502907:0309/184942.261475:VERBOSE1:cast_socket.cc(490)] [192.168.86.26:8009, auth=SSL_VERIFIED] DoAuthChallengeSendComplete: 0
1270:[502880:502907:0309/184942.313883:VERBOSE1:cast_socket.cc(536)] [192.168.86.26:8009, auth=SSL_VERIFIED] DoAuthChallengeReplyComplete: 0
1272:[502880:502907:0309/184942.314118:VERBOSE1:cast_socket.cc(667)] [192.168.86.26:8009, auth=SSL_VERIFIED] SetErrorState ChannelError::AUTHENTICATION_ERROR
1274:[502880:502907:0309/184942.314137:VERBOSE1:cast_socket.cc(627)] [192.168.86.26:8009, auth=SSL_VERIFIED] Close ReadyState = ReadyState::CONNECTING

Логи явно указывали на проблему с аутентификацией по протоколу CastV2. Более подробную информацию удалось узнать с помощью специализированного клиента node-castv2 для работы с фирменным протоколом CastV2:

$ cd node-castv2
$ npm install
$ node bin/dump-auth-response 192.168.86.26
(node:523150) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
output written to auth-signature.sig and auth-certificate.pem
CA written to auth-ca1.crt

Утилита показывает наличие двух сертификатов: auth-certificate.pem, соответствующий паре ключей на каждом устройстве Chromecast, и а auth-ca1.crt — это промежуточный центр сертификации, который подключается к корневому центру сертификации для аутентификации устройства.

Проверка сертификата на устройстве показывает, что тот действителен до 2036 года:

$ openssl x509 -in auth-certificate.pem -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1482187900 (0x5858647c)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=US, ST=California, L=Mountain View, O=Google Inc, OU=Cast, CN=Chromecast ICA 3
        Validity
            Not Before: Dec 19 22:51:40 2016 GMT
            Not After : Dec 14 22:51:40 2036 GMT
        Subject: ST=California, C=US, L=Mountain View, OU=Cast, O=Google Inc, CN=<redacted>
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c3:61:c8:ea:06:fc:7e:ba:5b:d9:f5:b6:39:08:
                    7c:f3:dc:a0:f0:07:44:e6:e2:de:b2:63:9b:20:9b:
                    f3:4f:00:6d:a8:f8:9d:26:64:a5:70:a2:77:61:07:
                    50:31:1f:9a:07:ed:f2:4a:e6:4f:1f:db:13:f5:22:
                    96:53:02:05:fe:37:eb:0f:bb:69:7d:93:6e:95:78:
                    26:7f:36:e0:54:f0:42:63:fd:d7:65:0a:70:88:06:
                    e6:ba:5c:65:6d:0a:63:fc:e8:af:a5:de:49:ec:cd:
                    63:ff:e5:cb:1e:a7:a7:49:d0:0f:e2:6a:45:a1:26:
                    8c:94:a8:63:86:51:ab:1c:f1:65:bd:55:3e:58:0e:
                    b3:54:92:c7:89:a8:73:ba:65:0d:36:7d:c5:46:5c:
                    f6:99:a3:aa:94:9f:93:4d:d7:b4:d7:e4:29:3f:2c:
                    75:b8:fb:64:e1:31:05:45:d3:40:bc:3e:33:2a:02:
                    3f:79:ed:23:c0:b8:77:b3:b8:db:6d:7e:aa:d0:fb:
                    b8:d2:df:55:97:24:65:45:f8:47:5c:e4:1d:96:15:
                    03:d9:90:89:93:53:11:a8:02:d1:96:06:3d:e7:a7:
                    bf:28:23:85:5b:7c:35:81:3d:05:09:2e:8d:99:13:
                    b5:58:5e:73:6b:73:82:4d:2e:40:02:08:26:2e:48:
                    56:d3
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature
            X509v3 Extended Key Usage:
                TLS Web Client Authentication
    Signature Algorithm: sha1WithRSAEncryption
    Signature Value:
        a5:d5:8a:e5:ae:c1:1a:4c:52:42:e0:74:54:d5:68:01:31:ac:
        d2:92:60:1b:15:de:cd:4a:7f:ad:2e:c4:38:06:91:70:15:da:
        af:69:9b:8e:6d:2d:0c:b0:08:8f:0f:66:1f:3a:4e:7f:8a:ae:
        56:a2:59:be:7d:da:65:d3:0a:2a:4b:93:37:70:e1:3b:74:18:
        81:f0:c6:68:10:81:1a:fa:7f:fd:1a:ba:2d:d8:17:8e:9d:50:
        ba:3b:13:e7:bd:90:47:b2:0a:b1:5e:c3:c4:ea:99:45:ad:67:
        c6:e5:54:47:bf:bf:4f:c2:1a:43:f9:5d:62:44:cd:55:55:62:
        0a:60:18:95:ef:ae:00:aa:af:da:b3:5a:cc:19:0f:37:5c:dd:
        23:01:0c:34:44:e0:d2:4c:07:8d:7f:fd:ae:32:9f:45:77:71:
        87:13:49:81:a1:d6:08:0f:4c:fc:38:cf:dd:41:ae:ce:85:7f:
        58:c1:08:73:fd:f5:b6:5c:bc:55:c2:c2:95:88:63:34:c7:d7:
        d2:23:d0:26:57:52:ff:c2:4d:ee:79:90:94:4a:ea:25:58:63:
        b2:a0:de:9c:b4:be:13:4c:e0:b1:f7:5a:54:46:85:57:ab:9e:
        0b:be:ba:5d:17:d1:3f:29:67:c6:f3:29:20:7e:5f:bd:6d:01:
        36:bb:af:e4

А вот с промежуточным сертификатом сразу обнаружились проблемы:

$ openssl x509 -in auth-ca1.crt -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 36 (0x24)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, ST=California, L=Mountain View, O=Google Inc, OU=Cast, CN=Cast Root CA
        Validity
            Not Before: Mar 12 16:44:39 2015 GMT
            Not After : Mar  9 16:44:39 2025 GMT
        Subject: C=US, ST=California, L=Mountain View, O=Google Inc, OU=Cast, CN=Chromecast ICA 3
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:d1:de:fb:ad:8b:43:07:28:ae:56:2d:f2:73:2a:
                    1f:63:43:76:6d:8d:b8:d1:d4:90:29:1b:91:68:4a:
                    55:41:a0:d5:61:b4:ec:dd:ae:e1:fa:a7:b6:38:c4:
                    de:19:e1:33:4d:9a:29:f1:48:e2:6b:a7:2c:21:14:
                    22:3f:87:81:f3:71:2c:e6:43:1c:b8:d4:ec:cf:67:
                    2f:b2:a2:75:8b:10:bd:f9:e7:c9:5c:de:05:a9:b4:
                    86:b7:68:7d:a7:76:85:e2:65:b8:76:51:4f:b9:60:
                    5d:7e:2b:64:48:12:66:d9:a7:bb:7c:d7:48:88:8a:
                    89:f9:18:14:8a:15:32:6a:1b:3f:40:64:3c:80:d3:
                    e5:72:ee:3b:6f:88:bb:93:1a:17:3c:35:cb:d4:5b:
                    d8:f4:50:06:08:88:0a:e5:c2:3c:b5:8d:9b:99:82:
                    26:a3:9b:b9:e5:01:90:b7:c9:dd:ff:0f:f6:cf:b4:
                    9b:f8:4a:70:40:03:ed:aa:38:35:92:49:4a:5a:20:
                    67:92:5e:25:a8:6b:6c:49:28:45:41:b3:95:1d:a1:
                    ad:ef:c3:5a:12:35:a6:2f:44:f4:fb:36:cc:f9:ff:
                    d4:6c:a8:60:e6:09:17:a6:a0:13:23:09:96:6f:dd:
                    3e:fd:fa:5a:e7:9a:06:13:e5:07:0e:7d:5c:0f:d1:
                    46:85
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:TRUE, pathlen:0
            X509v3 Subject Key Identifier:
                42:D6:3C:83:4E:4E:83:36:F4:2D:80:12:18:B0:FA:64:ED:CB:91:DD
            X509v3 Authority Key Identifier:
                7C:9A:1E:7D:DF:79:54:BC:D7:CC:5E:CA:99:86:45:79:65:74:28:19
            X509v3 Key Usage:
                Certificate Sign, CRL Sign
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        4c:c7:77:4b:09:75:84:ab:84:0c:93:1a:a3:1f:0a:02:b2:28:
        00:f3:eb:c1:e9:52:0c:7b:38:7b:02:d4:32:31:21:d1:85:b0:
        23:42:e0:26:05:e0:11:21:fc:b4:b3:7e:3d:aa:4a:54:a9:08:
        e6:79:27:fc:bd:fd:31:d8:d2:c2:de:96:0e:36:f9:f8:67:ca:
        f3:59:7a:a8:ef:a2:bd:a6:73:ea:e8:ab:5d:25:05:9d:72:2d:
        ff:0a:2c:7f:af:97:c6:c3:bf:b5:76:05:a0:00:11:1b:83:99:
        4c:8b:c8:b8:4b:76:79:03:56:cb:ea:cc:f2:02:bc:23:8b:1a:
        a6:7f:7f:4b:9d:7d:6a:69:cd:e3:50:78:b9:5c:ad:59:3e:dd:
        d3:8c:2f:0a:fb:dd:03:c0:77:84:e6:a9:26:17:14:24:a2:7b:
        3d:3c:b7:3c:d8:08:31:a4:4b:68:8b:0c:83:25:69:eb:68:42:
        a2:87:a0:a1:dd:5a:1a:4a:1c:ed:28:01:3d:ad:51:d6:5c:ef:
        4b:80:d2:7e:23:fc:bd:1a:02:30:d0:46:b8:b1:ab:0f:c7:28:
        ee:da:ba:e7:d6:3e:a4:a9:26:ec:d4:73:41:c5:9b:68:8a:a8:
        c6:15:39:33:4d:48:7e:6a:2f:4b:1c:6d:af:23:02:6d:e8:2f:
        ce:16:b8:4b

Его срок действия как раз истёк:

Not After : Mar 9 16:44:39 2025 GMT

Очевидно, в момент выхода устройств на рынок для аутентификации был выпущен промежуточный сертификат со сроком действия 10 лет. В результате, ни один официальный клиент Google на валидирует устройство Chromecast как настоящее и не соглашается с ним работать.

Как выяснилось, до 2016 года в коде проверки сертификатов Chromium были жёстко прописаны все промежуточные центры сертификации и вообще не проверялся срок их действия. Возможно, разработчики изначально не предполагали, что срок действия будут проверять. К сожалению, более позднее изменение в Chromium (и других клиентах) ввели традиционную проверку валидности цепочки, в том числе срок действия.

Исправление


Вскоре после массового сбоя появились неофициальные инструкции, как вернуть приставку к жизни.

Затем вышел официальный фикс от производителя, который сначала требовал возврата к заводским настройкам, но потом начал работать на всех устройствах.


Chromecast Audio

Если пользователь не инициировал возврат к заводским настройкам, то обновление устанавливалось на все устройства автоматически. При этом прошивка обновлялась до версии 1.56.467165 (Chromecast 2-го поколения) или 1.56.467166 (Chromecast Audio).

В случае возврата к заводским настройкам требовалось обновить приложение Google Home до последней версии (версия 3.30.1.6 для Android и 3.30.106 для iOS), а затем снова настроить Chromecast или Chromecast Audio.

В течение нескольких дней процедура была завершена — и все приставки получили обновление.

Хотя проблему решили, ситуация довольно неординарная сама по себе. Этот случай ещё раз показывает, что гаджеты очень редко способны работать длительный срок: много лет или десятилетий. Обычно они выходят из строя значительно раньше по разным причинам:

  • Запланированное устаревание аппаратных компонентов, которые случайно или специально не рассчитаны на длительный срок работы. Например, несъёмные аккумуляторы в смартфонах.
  • Устаревшее ПО, которое невозможно обновить из-за неподдерживаемого оборудования или прекращения поддержки устройства со стороны производителя.

Теперь к списку причин для выхода из строя оборудования добавились истёкшие сертификаты TLS. Хорошо, что в данном случае производителем оказалась крупная корпорация, которая взяла на себя ответственность и устранила проблему, но вполне можно представить ситуацию, когда фирма не захочет иметь дело с «морально устаревшими» моделями товаров прошлых лет.

Чтобы оградить себя от таких неприятностей, производителям рекомендуется изначально внедрять современные платформы управления цифровыми сертификатами.
Теги:
Хабы:
+13
Комментарии16

Публикации

Информация

Сайт
www.globalsign.com
Дата регистрации
Дата основания
1996
Численность
501–1 000 человек
Местоположение
Япония

Истории