Як перевіряються сертифікати HTTPS

Замок біля адреси сайту означає, що з'єднання зашифроване і що браузер переконався: сервер, з яким він розмовляє, справді контролює цей домен. Друга частина — найважливіша й найменш зрозуміла.

Ілюстрація до статті: Як перевіряються сертифікати HTTPS

Оновлено:

Замок біля адреси сайту означає, що з’єднання зашифроване і що браузер переконався: сервер, з яким він розмовляє, справді контролює цей домен. Друга частина — найважливіша й найменш зрозуміла. Шифрування без перевірки особи безглузде: можна встановити ідеально захищений канал зі зловмисником, який видає себе за банк. Перевірку особи забезпечують сертифікати, і ця стаття пояснює, що в них міститься, хто їх видає, чому браузер їм довіряє, і що означають попередження про сертифікат.

Як браузер перевіряє ланцюжок сертифікатів

Сертифікат — це цифровий документ, який пов’язує доменне ім’я з відкритим ключем і підписаний центром сертифікації (Certificate Authority, CA). У ньому зазначено: для яких імен він дійсний (versuss.space, www.versuss.space), з якої по яку дату, відкритий ключ сервера, хто його видав, і підпис видавця.

Коли браузер підключається до сайту, сервер надсилає свій сертифікат. Браузер перевіряє:

  1. чи збігається ім’я в сертифікаті з доменом в адресному рядку;
  2. чи не минув термін дії;
  3. чи підпис центру сертифікації справжній — за допомогою відкритого ключа цього центру;
  4. чи довіряє браузер цьому центру — тобто чи є його кореневий сертифікат у вбудованому сховищі довірених центрів операційної системи або браузера;
  5. чи не було сертифікат відкликано.

Далі сервер доводить, що володіє закритим ключем, що відповідає відкритому в сертифікаті, — підписуючи дані рукостискання. Зловмисник може скопіювати сертифікат (він публічний), але без закритого ключа не пройде цю перевірку. Після цього сторони узгоджують сеансовий ключ і починають шифрувати трафік.

Ланцюжок довіри

Сертифікати сайтів рідко підписують безпосередньо кореневим сертифікатом: кореневий ключ зберігають офлайн у сейфі, а ним підписують проміжні сертифікати, які вже підписують сертифікати сайтів. Браузер вибудовує ланцюжок: сайт → проміжний → кореневий, і довіряє сайту, якщо ланцюжок цілий і завершується у довіреному корені. Сервер має надсилати проміжні сертифікати разом зі своїм — «неповний ланцюжок» є частою причиною помилок, які видно лише на деяких пристроях.

Хто видає і як перевіряє

Перед видачею центр сертифікації перевіряє, що заявник контролює домен: просить розмістити певний файл на сайті, додати запис у DNS або відповісти на лист на адресу в домені. Це перевірка домену (DV) — і саме такі сертифікати видає безкоштовно Let’s Encrypt через автоматичний протокол ACME. Існують також OV і EV сертифікати з перевіркою організації, але браузери більше не виділяють їх візуально, і практичної різниці в захисті вони не дають. Сучасні сертифікати живуть до 398 днів, а Let’s Encrypt — 90, тому їх оновлюють автоматично: скрипт запитує новий сертифікат, підтверджує володіння доменом і замінює файл без участі людини.

Що означають попередження

  • «Термін дії сертифіката минув». Адміністратор не оновив його вчасно. Сайт, ймовірно, справжній, але це недбалість; не вводьте на ньому паролі.
  • «Ім’я не збігається». Сертифікат виданий для іншого домену: помилка налаштування — або ви на підробленому сайті.
  • «Видавець невідомий» / «самопідписаний». Сертифікат не підписаний довіреним центром. Нормально для тестових серверів і домашніх пристроїв; неприйнятно для публічного сайту.
  • «Сертифікат відкликано». Закритий ключ, ймовірно, скомпрометовано. Не заходьте.
  • Якщо попередження з’явилося на всіх сайтах одразу — перевірте годинник пристрою або шукайте програму (антивірус, корпоративний проксі), яка підміняє сертифікати.

Як правильно читати попередження про сертифікат

  • Замок підтверджує домен, а не чесність власника; читайте домен в адресному рядку.
  • Не натискайте «продовжити попри ризик» на сайтах, де вводите щось цінне.
  • Власникам сайтів: використовуйте автоматичне оновлення (certbot, вбудований механізм хостингу) і моніторинг терміну дії.
  • Надсилайте повний ланцюжок разом із проміжними сертифікатами й перевіряйте налаштування зовнішнім сканером TLS.
  • Додайте заголовок HSTS, щоб браузери взагалі відмовлялися від незашифрованого з’єднання з вашим сайтом.
  • Не встановлюйте чужі кореневі сертифікати на свій пристрій без чіткого розуміння, навіщо: це дозволяє власнику кореня видавати сертифікати для будь-якого сайту.

Часті запитання

Чи безкоштовний сертифікат гірший за платний?

Ні. Криптографія й перевірка домену однакові. Платні сертифікати додають перевірку організації, страховку та підтримку, але не безпечніше шифрування.

Що таке wildcard-сертифікат?

Сертифікат для *.example.com, дійсний для всіх піддоменів одного рівня. Зручний для багатьох сервісів, але компрометація одного ключа зачіпає всі.

Як браузер дізнається про відкликання?

Через списки відкликань (CRL), протокол OCSP або вбудовані зведення відкликань, які браузери оновлюють централізовано. Короткий термін дії сертифікатів зменшує залежність від цих механізмів.

Сертифікат — це нотаріально засвідчена заява «цей ключ належить цьому домену»; браузер довіряє нотарю, а не заяві.

Коротко: сертифікат пов’язує домен із відкритим ключем і підписаний центром сертифікації, якому довіряє браузер через вбудований список коренів. Браузер перевіряє ім’я, термін, підпис і ланцюжок до кореня, а сервер доводить володіння закритим ключем. Сертифікати видаються після підтвердження контролю над доменом, оновлюються автоматично й підтверджують адресу, а не намір власника.