Что такое HTTPS и как он работает
Что проверяют
Понимаете ли вы, что именно даёт HTTPS и как он устроен ниже уровня «поставили сертификат». Для бэкендера на Node вопрос быстро переходит в эксплуатацию: где терминируется TLS, что делать с цепочкой сертификатов и почему исходящий запрос из сервиса падает там, где браузер открывает ту же страницу без вопросов.
Как отвечать
HTTPS это обычный HTTP внутри TLS. Протокол даёт три свойства: конфиденциальность (трафик зашифрован), аутентификацию сервера (сертификат, подписанный доверенным центром, связывает имя домена с ключом) и целостность (подмена байтов ломает контрольный тег, соединение рвётся).
Рукопожатие коротко: клиент присылает поддерживаемые наборы шифров и имя домена отдельным расширением, сервер отвечает сертификатом и своей частью обмена ключами, обе стороны через эфемерный протокол Диффи и Хеллмана получают общий сеансовый ключ, дальше работает симметричное шифрование. Приватный ключ сервера участвует в подписи, а не в расшифровке трафика, поэтому записанная сегодня сессия не читается даже при утечке ключа завтра.
Для Node добавьте эксплуатацию: в продакшене TLS обычно терминирует обратный прокси, приложение слушает открытый порт внутри периметра и узнаёт исходную схему из проставленного прокси заголовка, а доверять этому заголовку можно только при явно включённом доверии к прокси.
Где спотыкаются
Говорят SSL вместо TLS и считают слова синонимами. Ранние версии протокола давно отключены на обеих сторонах, название осталось только в именах библиотек и файлов ключей.
Отдают клиенту сертификат без промежуточных. Браузер часто достраивает цепочку сам, а серверный клиент и консольные утилиты нет, отсюда классический баг: в браузере работает, из сервиса нет.
Чинят ошибку проверки сертификата её отключением. Такой флаг превращает соединение в шифрование без аутентификации, то есть защищает от пассивного слушателя и совсем не защищает от посредника.