Перейти к основному содержимому

7.07. Сертификаты

Разработчику Инженеру

Сертификаты, MITM

Начнём с интересного - с сертификации. Ранее мы изучили то, что еcть HTTP, а есть HTTPS, и возможно, не совсем поняли разницу между ними, кроме того, что магическая S предполагает защиту.

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

Если попытаться открыть сайт через протокол HTTP , большинство современных браузеров выведут предупреждение о том, что соединение незащищённое, а в ряде случаев и вовсе откажется открывать подозрительный сайт. Это связано с тем, что HTTP передаёт данные в открытом виде, без шифрования, что делает их уязвимыми к атакам типа man-in-the-middle.

Man-in-the-middle (MITM) — это тип кибератаки, при котором злоумышленник вклинивается между двумя участниками общения , например «Клиент-Злоумышленник-Сервер».

Он может прослушивать трафик, модифицировать данные, перехватывать логины, пароли, токены, платёжные данные. К примеру, это может быть перехват данных через публичный Wi-Fi, а также:

  • DNS spoofing (или DNS poisoning) — это атака, при которой злоумышленник перехватывает запрос DNS-сервера и возвращает поддельный IP-адрес , перенаправляя жертву на вредоносный сайт вместо нужного. Защититься от этого можно при использовании DNSSEC (цифровые подписи для проверки ответов), подключении через DoH (DNS over HTTPS) или DoT (DNS over TLS), а также путём отказа от использования публичных DNS без шифрования (например, Google DNS без защиты).
  • DNSSEC — это набор расширений протокола DNS, добавляющих поддержку цифровых подписей , чтобы проверить подлинность и целостность DNS-ответов. Каждый DNS-ответ подписывается криптографическим ключом. Клиент проверяет подпись, чтобы убедиться, что ответ не был изменён.
  • DNS over HTTPS — это технология, при которой DNS-запросы отправляются через HTTPS , чтобы защитить их от прослушивания и манипуляций.
  • DNS over TLS — аналог DoH, но вместо HTTPS используется протокол TLS для шифрования DNS-запросов. DNS-запросы отправляются через защищённое TCP-соединение на порту 853.
  • ARP - spoofing (Address Resolution Protocol spoofing) — это атака в локальной сети, при которой злоумышленник притворяется другим устройством, чтобы перехватывать трафик между клиентом и шлюзом. Защититься можно через статические ARP-записи, внедрение порт-безопасности на коммутаторах (MAC limiting, sticky MAC) и использование шифрования (HTTPS, VPN), чтобы даже при MITM данные были защищены.
  • MAC Limiting — это функция коммутаторов, которая ограничивает количество MAC-адресов, которые могут использовать один физический порт. Защищает от злоумышленников, которые хотят подключить свой маршрутизатор/компьютер к вашей физической сети. Если вы установите лимит = 1, то только одно устройство может быть подключено к этому порту.
  • Sticky MAC — это функция коммутаторов, которая запоминает MAC-адреса, подключенных к порту устройств, и не позволяет другим устройствам использовать этот порт. Коммутатор запоминает MAC-адрес устройства, и если кто-то попытается подключиться с другим MAC — доступ будет заблокирован.
  • HTTPS stripping (понижение до HTTP) — это атака, при которой злоумышленник понижает соединение с HTTPS до HTTP, чтобы иметь возможность прослушивать трафик. Защита - установка заголовка HTTP Strict Transport Security (HSTS), редирект всех HTTP-запросов на HTTPS, использование HSTS preload list (в браузерах).
  • SSL stripping — более ранняя версия HTTPS stripping. Злоумышленник отбрасывает SSL/TLS-соединение, чтобы получить доступ к незашифрованному трафику. Это классическая MITM-атака , которая позволяет просматривать и изменять данные. Защита - HSTS, проверка сертификатов на клиенте, использование Public Key Pinning (HPKP), обучение пользователей обращать внимание на значок замочка в адресной строке.
  • HTTP Public Key Pinning — механизм, позволяющий сайтам указывать, какие публичные ключи SSL/TLS должны использоваться для их домена. Без HPKP, если злоумышленник получит сертификат от доверенного CA, он сможет обмануть браузер и выполнить MITM-атаку. Сервер отправляет заголовок Public-Key-Pins, где указаны хэши допустимых публичных ключей.

Чтобы защититься от MITM, нужно обеспечивать использование HSTS для принудительного HTTPS (HTTPS+HSTS), использовать проверенные, актуальные и самоподписанные SSL/TLS-сертификаты, проверять их цепочку доверия, а также можно шифровать данные end-to-end - тогда даже если трафик будет прослушиваться, без ключа будет бесполезен. На фронтенде можно использовать Content-Security-Policy (CSP).

HTTPS — это расширение протокола HTTP, которое использует технологию шифрования , чтобы обеспечить безопасный обмен данными между клиентом и сервером. Основой HTTPS является протокол TLS (Transport Layer Security) или его устаревшая версия SSL (Secure Sockets Layer).

SSL (Secure Sockets Layer) — устаревший протокол шифрования, который использовался ранее. Сейчас он считается небезопасным.

TLS (Transport Layer Security) — современный стандарт шифрования, который заменил SSL. В настоящее время используется TLS 1.2 и TLS 1.3.

Термин «SSL» до сих пор часто встречается в бытовом языке, хотя технически сейчас речь идёт именно о TLS.

Как работает:

  • Установка соединения - клиент и сервер обмениваются сертификатами.
  • Шифрование - данные шифруются с использованием симметричных и асимметричных алгоритмов.
  • Проверка целостности - используется HMAC для проверки целостности данных.

Применение:

  • HTTPS: защищенный веб-трафик.
  • SMTP, IMAP: безопасная передача электронной почты.
  • gRPC, WebSocket: безопасное взаимодействие микросервисов.

mTLS (Mutual TLS) — это расширение TLS, при котором обе стороны (клиент и сервер) аутентифицируют друг друга с помощью сертификатов. Это обеспечивает двустороннее доверие.

Как работает:

  • Клиент отправляет свой сертификат серверу.
  • Сервер проверяет сертификат клиента.
  • Сервер отправляет свой сертификат клиенту.
  • Клиент проверяет сертификат сервера.

OpenSSL — это криптографическая библиотека и набор инструментов для работы с протоколами SSL/TLS. Она используется для создания, управления и проверки сертификатов, а также для шифрования данных.

Работа HTTPS основана на технологии асимметричного шифрования, которая позволяет безопасно обмениваться данными даже по незащищённым каналам связи.

Клиент сначала отправляет запрос на сервер, предлагая поддерживаемые версии TLS и алгоритмы шифрования (такой этап называется запросом клиента, или Client Hello), а сервер выбирает наиболее подходящий набор параметров и отправляет свой SSL/TLS-сертификат вместе с открытым ключом (ответ сервера, Server Hello).

Клиент проверяет подлинность сертификата:

  • находится ли издатель (удостоверяющий центр) в списке доверенных;
  • не истёк ли срок действия сертификата;
  • совпадает ли доменное имя с адресом сайта.

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

SSL/TLS-сертификат — это цифровой документ, связывающий открытый ключ с идентичностью владельца сайта. Он содержит следующую информацию:

  • доменное имя сайта;
  • имя владельца или организации;
  • открытый ключ;
  • срок действия сертификата;
  • подпись удостоверяющего центра (CA);
  • информация об алгоритмах шифрования.

Сертификаты создаются и подписываются удостоверяющими центрами (CA — Certificate Authority), которые играют роль доверенной третьей стороны.

Для проверки подлинности сертификата используется цепочка сертификатов, состоящая из трёх уровней:

  • Корневой сертификат (Root CA), который создаётся и хранится самим удостоверяющим центром, и устанавливается в операционные системы и браузеры по умолчанию;
  • Промежуточный сертификат (Intermediate CA), который выпускается корневым центром и используется для выпуска конечных (серверных) сертификатов, позволяя избежать прямого использования корневого сертификата;
  • Серверный сертификат (Leaf или End-Entity Certificate), который выдаётся конкретному сайту и содержит информацию о домене и публичном ключе.

Браузер проверяет каждое звено этой цепочки, начиная с корневого сертификата, чтобы убедиться в её достоверности.

Сайты, работающие по протоколу HTTP, не обеспечивают шифрования. Это значит, что все данные (логины, пароли, номера карт и т. д.) передаются в открытом виде и могут быть легко перехвачены злоумышленником. Поэтому современные браузеры (например, Chrome, Firefox, Edge) помечают такие сайты как небезопасные , чтобы предупредить пользователей о рисках.

Большинство известных мировых удостоверяющих центров (например, DigiCert, Let’s Encrypt, Sectigo) находятся за пределами России. Для обеспечения суверенитета и безопасности в РФ были созданы собственные удостоверяющие центры, например Минцифры России (ранее Минкомсвязи), Центр сертификации ключей Минобороны и УЦ ФСБ.

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

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

  1. Скачать корневой сертификат этого центра.
  2. Установить его в хранилище доверенных корневых сертификатов операционной системы или браузера.
  3. После установки сайт должен открыться без ошибок.

ACME (Automated Certificate Management Environment)— это протокол, который позволяет автоматически получать и обновлять сертификаты TLS от центров сертификации (например, Let's Encrypt). Он используется для безопасного шифрования трафика.

Let's Encrypt — это бесплатный центр сертификации, предоставляющий SSL/TLS-сертификаты для шифрования трафика. Он использует протокол ACME для автоматизации процесса получения сертификатов. Сертификаты действуют 90 дней.

Секретный ключ (Secret Access Key) — это компонент учетных данных, используемый для аутентификации и авторизации в облачных сервисах, API или других системах. Обычно он используется вместе с Access Key ID (идентификатором доступа). Это безопасное хранение ключей в Kubernetes Secrets или HashiCorp Vault.

Самоподписанный сертификат — это сертификат, который подписывается собственным приватным ключом, а не центром сертификации (CA). Он используется для тестирования или внутренних систем.

Сертификат - это цифровой документ, связывающий открытый ключ с идентичностью владельца. Он может быть связан не только с сайтами, но и с другими владельцами, чем служит при определении подлинности.

Удостоверяющий центр (CA) - это организация, выпускающая и подписывающая сертификаты.

Цепочка сертификатов - это последовательность сертификатов от корневого до серверного.

Асимметричное шифрование - это метод шифрования, использующий пару ключей — открытый и закрытый.

Симметричное шифрование - это шифрование, при котором используется один и тот же ключ для шифрования и дешифрования.

Сеансовый ключ - временный ключ, создаваемый для одного сеанса связи.