SSL-сертификат, сгенерированный Firebase Hosting, не включает подключенный домен
У нас была эта проблема дважды за последнюю неделю. Для проекта Firebase Hosting с двумя подключенными доменами один домен не включен в сертификат.
При попытке установить соединение с браузером возвращается код состояния 503, и Chrome показывает net::ERR_CERT_COMMON_NAME_INVALID
в консоли. curl
возвращается
(51) SSL: нет альтернативного имени субъекта сертификата, совпадающего с именем целевого хоста '{хост}'
(где {host}
это имя хоста / подключенный домен)
Чтобы проверить сертификат напрямую, то есть SAN, я использую следующую команду:
gnutls-cli --print-cert ${host} < /dev/null \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
| openssl x509 -noout -text \
| grep DNS | tr , '\n' | tr -s " "
Это возвращает список из 100 сертификатов, включая имя хоста для рабочего домена, но только записи firebaseapp.com/*.firebaseapp.com по умолчанию для отказавшего домена.
Примечание: я использую gnutls-cli
здесь, потому что кажется, что openssl s_client -connect ${host}:443
не включает имя хоста в запрос и всегда загружает сертификат для firebaseapp.com/*.firebaseapp.com
Я уже обратился в службу поддержки Firebase, но их последний ответ (~16 часов назад) был "есть два разных домена, связанных с одним и тем же проектом, но мне нужно подтвердить, поддерживается ли это". Я вполне уверен, что это поддерживается, учитывая, что в ходе анализа проблемы я обнаружил более 400 SAN для тех же двух имен хостов рядом с доменами, находящимися под нашей ответственностью.
Любые предложения о том, как мы можем решить эту проблему? Я уже пытался удалить и повторно добавить пользовательский домен, но это ничего не изменило.
Смена хостинга технически не будет слишком сложной, но наша главная проблема заключается в том, что DNS находится под контролем поставщика услуг нашего клиента, и им трудно что-либо изменить уже в работе.
4 ответа
После некоторой перемотки с поддержкой Firebase они обнаружили, что корневой домен содержит запись CAA, которая не включает letsencrypt.org.
Исправление в нашем конкретном случае заключалось в том, чтобы включить шифрование давайте только для поддоменов. В качестве примера, используя следующие настройки
- Домен:
awesomesite.com
- Подключенный домен:
firebaseapp.awesomesite.com
Мы можем запросить записи, используя dig:
$ dig CAA awesomesite.com +noall +answer && dig CAA firebaseapp.awesomesite.com +noall +answer
; <<>> (...) <<>> CAA awesomesite.com +noall +answer
;; global options: +cmd
awesomesite.com. 299 IN CAA 0 iodef "mailto:cert@awesomesite.com"
awesomesite.com. 299 IN CAA 0 issue "digicert.com"
; <<>> (...) <<>> CAA firebaseapp.awesomesite.com +noall +answer
;; global options: +cmd
firebaseapp.awesomesite.com. 3599 IN CAA 0 issue "letsencrypt.org"
Как видите, домен firebaseapp.awesomesite.com
имеет запись CAA с letsencrypt.org, в то время как awesomesite.com
не был тронут.
Теперь все работает нормально, через некоторое время после обновления записей. Нам не пришлось повторно запускать развертывание на хостинге Firebase или удалять / добавлять подключенный домен (то, что я ранее пытался решить проблему).
Альтернативы для устранения проблемы:
- Удалить записи CAA: удалить запись CAA из корневого домена (или промежуточных доменов).
- Расширить записи CAA: включить letsencrypt.org в список доменов в записи CAA корневого домена
Хотя в их сертификате можно видеть 400 сетей SAN, это лишь свидетельство того, что у них есть "готовая" технология. Но обратите внимание, что вы, вероятно, попали в финансовую / бизнес стену. У Firebase нет стимула становиться хостингом корпоративного уровня, поэтому вполне естественно, что им не хватает некоторых функций.
Вы правы работать с поддержкой на этом. Вероятность того, что вы получите техническое решение, довольно мала, но, по крайней мере, вы помогаете другим, заставляя их в конечном итоге задокументировать это конкретное ограничение.
Для вашего личного домена, если ваши записи DNS содержат записи A или CNAME, которые указывают на других поставщиков, Firebase не может предоставить сертификат SSL.
прочтите, что, возможно, это ваш случай,
https://firebase.google.com/docs/hosting/custom-domain
Дождитесь предоставления сертификата SSL. После подтверждения права собственности на домен мы предоставляем сертификат SSL для вашего домена и развертываем его в нашей глобальной сети CDN в течение 24 часов после того, как вы укажете свои записи DNS A на хостинге Firebase.
Ваш домен будет указан как одно из альтернативных имен субъектов (SAN) в SSL-сертификате FirebaseApp. Вы можете просмотреть этот сертификат с помощью инструментов безопасности браузера. Во время подготовки домена вы можете увидеть недействительный сертификат, в котором отсутствует ваше доменное имя. Это нормальная часть процесса, которая разрешится после того, как сертификат вашего домена станет доступен.
Для пользователей расширенной настройки ваш веб-сайт будет размещаться у вашего предыдущего хостинг-провайдера до тех пор, пока статус настройки на странице хостинга Firebase вашего проекта не изменится на Connected.