О корневых и кросс-сертификатах


История об обновлении сертификата сайта.

Предыстория

Есть сайт, на него раз в год покупается SSL сертификат. То есть при очередной оплате провайдер присылает три сертификата (цепочка): корневой, промежуточный и “сертификат сайта”.

Обычно из всех трёх сертификатов цепочки каждый год обновляется только сертификат сайта. Но в очередной раз, в 2024 году обновились все три. Ну ок, обновляем.

Проблема

Внезапно юзеры начинают жаловаться на ошибку недействительного сертификата. В процессе выясняется, что проблема ограничена iOS 12 и какими-то редкими Androidами.

Если сравнить старый и новый корневой сертификат, то там поменялся signature algorithm. Раньше был sha256WithRSAEncryption, а стал sha384WithRSAEncryption

Как известно, корневые сертификаты зашиты в девайс и могут поменяться только при обновлениях. Но вот на старые телефоны слишком уж новые сертификаты с обновлениями не придут, может быть хотя бы потому, что у каждой версии OS есть минимальные требования к телефону - т.е. старый телефон не получит новую OS, а значит и свежие корневые сертификаты.

Apple публикует списки сертификатов для каждой версии iOS. Например, вот список для iOS 15, а вот для iOS 12. И оказывается новый корневой сертификат есть в первом списке, но его нет во втором.

Решение

Можно выдумать много всего - заставить всех обновиться, заставить всех поставить себе дополнительный корневой сертификат (наверняка придётся задолбаться, если это вообще возможно) или вообще купить сертификат сайта, который подписан старым корневым.

Оказывается, всё решается проще, надо только знать ключевое слово - “кросс-сертификат”. Это новый корневой, подписанный старым корневым. В данном случае, про это узнали, написав в саппорт, где покупали сертификат. Нагуглить что-то сходу не смогли.

Грубо говоря, если старый сертификат называется Root R1, а новый Root R6, то надо составить цепочку: Root R1, затем Cross certificate R1 - R6, далее новый промежуточный, который как раз подписан R6 и дальше сам сертификат сайта. То есть в цепочке теперь не 3, а 4 сертификата. Например, для GlobalSign кросс-сертификаты можно скачать здесь.