
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. Хорошо, что в данном случае производителем оказалась крупная корпорация, которая взяла на себя ответственность и устранила проблему, но вполне можно представить ситуацию, когда фирма не захочет иметь дело с «морально устаревшими» моделями товаров прошлых лет.
Чтобы оградить себя от таких неприятностей, производителям рекомендуется изначально внедрять современные платформы управления цифровыми сертификатами.