Skip to content
EN
← Все статьи

Что такое HTTPS: как работает и чем отличается от HTTP

Коротко. HTTPS — это обычный HTTP, завёрнутый в слой шифрования TLS. Между браузером и сервером поднимается защищённый канал: адрес страницы, заголовки, cookie, пароли и ответ сервера не видны никому в сети. Дополнительно браузер по сертификату проверяет, что говорит именно с тем доменом, который написан в адресной строке.

Схема: HTTP передаёт запрос открытым текстом, HTTPS помещает тот же запрос внутрь шифрованного TLS-туннеля
HTTPS не меняет сам HTTP-запрос — он прячет его внутрь TLS-канала.

Что такое HTTPS простыми словами

HTTP — это набор правил, по которым браузер просит у сервера страницу, а сервер отвечает. Правила прекрасно работают, но у них есть одно свойство: всё передаётся открытым текстом. Любой узел на пути — Wi-Fi точка в кафе, провайдер, корпоративный прокси, скомпрометированный роутер — видит запрос целиком и может его изменить.

HTTPS (HyperText Transfer Protocol Secure) — это тот же самый HTTP, но перед отправкой он попадает в шифрованный канал TLS. Сам протокол HTTP при этом не меняется: те же методы GET и POST, те же заголовки, те же коды ответа. Меняется только транспорт под ним. Схема https:// в адресной строке описана в спецификации HTTP — RFC 9110, а сам протокол шифрования — в RFC 8446 (TLS 1.3).

Аналогия, которая не врёт: HTTP — это открытка. Текст читает каждый почтальон, и любой из них может дописать пару строк, а получатель не заметит подмены. HTTPS — это запечатанный конверт, у которого вдобавок проверяется печать отправителя.

Три вещи, которые даёт HTTPS

  • Конфиденциальность. Содержимое запроса и ответа зашифровано. Наблюдатель видит факт соединения, но не его содержимое.
  • Целостность. Данные подписаны на уровне шифра. Если провайдер или зловредный узел попытается подменить один байт в ответе, соединение оборвётся с ошибкой, а не отдаст испорченную страницу.
  • Аутентификация сервера. Браузер убеждается по сертификату, что на том конце действительно сервер запрошенного домена, а не чужая машина, перехватившая трафик.

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

Чем HTTPS отличается от HTTP

Разница не только в букве S. Ниже — практические отличия, которые видны админу и владельцу сайта.

ПризнакHTTPHTTPS
Схема URLhttp://https://
Порт по умолчанию80443
Шифрование каналанетда, TLS
Проверка подлинности серверанетда, по сертификату
Защита от подмены содержимого в путинетда, целостность на уровне шифра
Нужен сертификатнетда
HTTP/2 в браузерахне поддерживаетсяподдерживается
HTTP/3 (QUIC)не существует без TLSподдерживается, TLS 1.3 обязателен
Метка в адресной строке«Не защищено»замок
Service Workers, геолокация, камерабраузер блокируетдоступны
Заголовок Referer при переходе на HTTP-сайтпередаётсяпо умолчанию не передаётся

Отдельно стоит выделить строку про HTTP/2 и HTTP/3. Формально стандарт HTTP/2 допускает работу без шифрования (режим h2c), но ни один массовый браузер это не реализовал. То есть на практике переход на современные версии протокола возможен только через HTTPS — а это уже вопрос скорости, а не только безопасности. Если вы измеряете скорость загрузки страниц, то часть выигрыша от HTTP/2 и HTTP/3 без HTTPS просто недоступна.

Ещё один эффект, о котором забывают: браузеры постепенно перевели «мощные» возможности в разряд доступных только по HTTPS. Service Worker, доступ к камере и микрофону, точная геолокация, Web Push на HTTP-странице либо не работают вовсе, либо работают только на localhost при разработке.

Что такое HTTPS-соединение: как проходит TLS-рукопожатие

Прежде чем уйдёт первый байт HTTP-запроса, клиент и сервер должны договориться о ключах. Этот обмен называется рукопожатием (handshake). Без академического занудства он выглядит так.

TLS 1.3 — один круг обмена

  1. ClientHello. Браузер сообщает: поддерживаемые версии TLS, список шифров, имя нужного хоста (расширение SNI) и — главное — сразу присылает свою половину ключа для обмена по алгоритму Диффи — Хеллмана на эллиптических кривых. Он угадывает, какую группу выберет сервер, и не ждёт ответа.
  2. ServerHello. Сервер выбирает шифр, отдаёт свою половину ключа. С этого момента обе стороны независимо вычисляют общий секрет — по сети он никогда не передавался.
  3. Сертификат и подпись. Сервер присылает цепочку сертификатов и подписывает ею всё рукопожатие целиком (сообщение CertificateVerify). Это доказывает, что у него есть закрытый ключ, соответствующий сертификату. В TLS 1.3 всё это уже зашифровано.
  4. Finished. Обе стороны сверяют хеш всего диалога. Если посередине кто-то поменял хотя бы один байт, хеши не сойдутся и соединение оборвётся.

Итог: одна поездка туда-обратно (1-RTT) — и можно слать HTTP-запрос.

Чем отличался TLS 1.2

В TLS 1.2 сервер сначала отвечал приветствием и сертификатом, и только потом клиент отправлял свою часть ключа — получалось два круга обмена (2-RTT). Плюс сертификат сервера передавался открытым текстом: любой наблюдатель видел, на какой домен выписан сертификат. В TLS 1.3 сертификат зашифрован, а из набора шифров вычищены устаревшие конструкции вроде RSA-обмена ключами без прямой секретности.

TLS 1.0 и TLS 1.1 официально объявлены устаревшими отдельным документом IETF — RFC 8996. Актуальные браузеры их уже не согласуют. Если на сервере включены только они, посетитель увидит ошибку соединения, а не старомодную, но рабочую страницу.

Диаграмма TLS-рукопожатия: ClientHello с половиной ключа, ServerHello, сертификат и подпись, Finished
TLS 1.3 укладывает согласование ключей в один круг обмена и шифрует сертификат сервера.

Посмотреть, чем именно договорились ваш сервер и клиент, можно одной командой. Она открывает TLS-соединение и печатает согласованную версию протокола, шифр и результат проверки цепочки:

echo | openssl s_client -connect example.com:443 -servername example.com 2>&1 \
  | grep -E 'Protocol|Cipher|Verify return code'

Флаг -servername здесь обязателен: он передаёт SNI. Без него сервер с несколькими сайтами на одном IP отдаст сертификат по умолчанию, и вы будете отлаживать чужой сертификат. Строка Verify return code: 0 (ok) означает, что цепочка собралась и доверие подтвердилось; любое другое число — повод разбираться.

Проверить, поддерживается ли конкретная версия протокола, можно принудительным флагом. Если сервер не умеет TLS 1.3, команда завершится ошибкой согласования:

openssl s_client -connect example.com:443 -servername example.com -tls1_3 </dev/null

# и наоборот — убедиться, что древние версии отключены:
openssl s_client -connect example.com:443 -servername example.com -tls1_1 </dev/null

Что такое SSL-сертификат и кто его выдаёт

Сертификат — это файл, который связывает доменное имя с открытым ключом и подписан удостоверяющим центром (Certificate Authority, CA). Название «SSL-сертификат» историческое: протокол SSL давно уступил место TLS, а имя прижилось. Технически это X.509-сертификат для TLS.

Доверие работает по цепочке. В операционной системе и браузере лежит хранилище корневых сертификатов — несколько сотен CA, которым производитель решил доверять. Корневой сертификат подписывает промежуточный, промежуточный — сертификат вашего сайта. Браузер разворачивает цепочку до корня, который у него уже есть, и только тогда показывает замок.

Самая частая ошибка настройки — отдавать браузеру только сертификат сайта, забыв промежуточный. В Chrome на десктопе такой сайт может открыться нормально (браузер иногда достраивает цепочку сам), а на мобильном или в curl — упасть с ошибкой. Всегда отдавайте полную цепочку: в Let's Encrypt это файл fullchain.pem, а не cert.pem.

Типы проверки: DV, OV, EV

ТипЧто проверяет CAВыпускЧто видит посетитель
DV (Domain Validation)только контроль над доменом: DNS-запись, файл на сайте или письмо на служебный адресминуты, автоматическиобычный замок
OV (Organization Validation)дополнительно существование юридического лицадни, с документамиобычный замок; название компании только внутри сертификата
EV (Extended Validation)расширенная проверка организации по регламенту CA/Browser Forumдни или неделиобычный замок; отдельной подсветки в адресной строке браузеры давно не показывают

Практический вывод неприятен для продавцов дорогих сертификатов: с точки зрения шифрования DV, OV и EV не отличаются вообще ничем. Один и тот же алгоритм, одна и та же стойкость. Разница только в том, что записано в поле «владелец» и сколько бумаг для этого собрали. Посетитель эту разницу не увидит, пока не откроет сертификат вручную — а этого не делает почти никто.

Бесплатные сертификаты и срок жизни

Проект Let's Encrypt сделал DV-сертификаты бесплатными и автоматическими. Стандартный срок действия его сертификата — 90 дней, а обновление рассчитано на автоматику: клиент вроде certbot продлевает сертификат по расписанию, обычно когда до конца остаётся около трети срока.

Общий тренд отрасли — сокращение максимального срока жизни публичных TLS-сертификатов. Конкретный лимит задаётся требованиями CA/Browser Forum и время от времени пересматривается, поэтому ориентироваться стоит на актуальную редакцию Baseline Requirements, а не на цифру из статьи. Практический вывод от этого не меняется: ручное продление раз в год — стратегия, которая рано или поздно закончится упавшим сайтом в выходные.

Схема цепочки доверия: корневой сертификат подписывает промежуточный, промежуточный — сертификат сайта
Браузер показывает замок, только если сумел развернуть цепочку до корня из своего хранилища.

Посмотреть, на какие имена выписан сертификат и когда он истекает:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates

# полный список доменов, которые покрывает сертификат (OpenSSL 1.1.1 и новее):
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -ext subjectAltName

Поле subjectAltName (SAN) — единственное, что имеет значение при проверке имени. Старое поле Common Name современные клиенты игнорируют: правила проверки имени сервера описаны в RFC 9525. Если домена нет в SAN, браузер покажет ошибку несоответствия имени, даже когда сертификат абсолютно валиден.

Ещё один полезный факт: все публично доверенные сертификаты попадают в открытые журналы Certificate Transparency (RFC 6962). Это значит, что любой выпуск сертификата на ваш домен виден публично — в том числе выпуск, которого вы не заказывали. Хорошая привычка — периодически просматривать эти журналы по своему домену.

Что означает замок в браузере — и чего он не гарантирует

Это самый недопонятый элемент интерфейса за всю историю вебa. Разберём честно.

Что замок действительно подтверждает

  • Соединение с сервером зашифровано, и содержимое страницы не читается по дороге.
  • Сертификат не истёк и не отозван на момент проверки.
  • Сертификат выписан на то самое доменное имя, которое стоит в адресной строке.
  • Сертификат подписан удостоверяющим центром, которому доверяет ваш браузер.

Чего замок не подтверждает

  • Что сайт не мошеннический. DV-сертификат бесплатен и выдаётся автоматически любому, кто доказал контроль над доменом, — включая владельца фишингового домена. Замок на поддельной странице банка сегодня скорее правило, чем исключение.
  • Что владельца кто-то проверил. При DV-проверке не проверяется вообще ничего, кроме контроля над доменом. Ни компания, ни человек, ни адрес.
  • Что на сайте нет вредоносного кода. Шифруется канал, а не содержимое. Заражённая страница доедет до вас в целости и сохранности — именно это и гарантирует TLS.
  • Что данные в безопасности после доставки. Что происходит с паролем на сервере — хешируется он или пишется в лог открытым текстом, — TLS не знает и знать не может.
  • Что домен принадлежит той компании, чьё название вы прочитали. Домены вроде sberbank-online-support.example получают сертификат ровно так же, как настоящие.

Замок означает «канал до этого домена защищён», а не «этому сайту можно доверять». Это разные утверждения, и подмена одного другим — рабочий инструмент фишинга уже много лет. Проверяйте домен глазами, а не наличие замка.

Если вы оцениваете чужой сайт, а не свой, полезнее смотреть не на замок, а на репутационные сигналы: возраст домена, данные регистрации, наличие сайта в базах вредоносного ПО. Отдельные проверки для этого есть на странице проверки сайта на вредоносное ПО и в WHOIS-инструменте.

Что такое HTTPS-запрос: что шифруется, а что видно

Формулировка «HTTPS шифрует всё» удобна, но неточна. Часть метаданных остаётся видимой — и это важно понимать при разговорах о приватности.

ЭлементВиден наблюдателю в сетиКомментарий
Путь и query-строка (/order?id=42)нетзашифровано целиком
Заголовки запроса, cookie, токенынетзашифровано
Тело запроса и ответанетзашифровано
IP-адрес сервера и портдаиначе пакет не доедет
Имя хоста в SNIдапередаётся открытым текстом при рукопожатии
DNS-запрос перед соединениемда, если не DoH или DoTобычный DNS идёт открытым текстом
Объём и тайминги трафикадапо размеру ответа иногда можно угадать страницу
Сертификат сервератолько в TLS 1.2в TLS 1.3 зашифрован

Практический вывод: HTTPS надёжно скрывает что именно вы делаете на сайте, но не скрывает факт обращения к домену. Механизм Encrypted Client Hello, который прячет и SNI, на момент написания остаётся черновиком IETF и включён далеко не везде. Шифрование самих DNS-запросов решается отдельно — через DoH или DoT.

Второй практический вывод — для разработчиков. Раз путь и query зашифрованы, значит, промежуточные узлы не увидят токен в URL. Но его увидят логи сервера, заголовок Referer у внешних ресурсов и история браузера. HTTPS не отменяет правила «секреты не кладут в query-строку».

HTTPS и www — это разные вещи

Путаница возникает потому, что и то, и другое живёт в начале адреса. Но это разные уровни:

  • https://схема, то есть протокол доступа. Отвечает на вопрос «как соединяться».
  • wwwподдомен, то есть часть имени хоста. Отвечает на вопрос «с кем соединяться». Технически www.example.com — такой же поддомен, как blog.example.com, просто исторически принятый.

Отсюда следует важное: комбинаций четыре, и для браузера, кэша и поисковой системы это четыре разных адреса.

АдресСхемаХостЧто должно происходить
http://example.comHTTPapex301 на канонический адрес
http://www.example.comHTTPwww301 на канонический адрес
https://example.comHTTPSapexканонический или 301
https://www.example.comHTTPSwwwканонический или 301

Правило простое: выбрать один канонический вариант и увести на него остальные три постоянным редиректом. Какой именно выбирать — вопрос не технический, а организационный, обе схемы рабочие. Единственный технический довод в пользу www: на apex-домене нельзя поставить CNAME-запись рядом с другими записями, поэтому подключение CDN к голому домену требует нестандартных решений провайдера, а на www достаточно обычного CNAME.

Схема четырёх вариантов адреса — http и https, с www и без — сводящихся редиректом к одному каноническому
Четыре адреса, один канонический: остальные три уводятся постоянным редиректом.

Сертификат на example.com не покрывает www.example.com автоматически — оба имени должны быть в SAN. И наоборот: wildcard-сертификат *.example.com покрывает www.example.com, но не покрывает сам example.com и не покрывает a.b.example.com — звёздочка заменяет ровно одну метку имени.

Минимальная конфигурация nginx, которая закрывает все четыре адреса и включает HSTS:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;                      # nginx 1.25.1+; раньше: listen 443 ssl http2;
    server_name www.example.com;
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}

Обратите внимание: у блока с редиректом на 443 порту тоже указан сертификат. Это не избыточность — чтобы отдать редирект по HTTPS, сервер сначала должен завершить TLS-рукопожатие, а для этого ему нужен сертификат, валидный для www. Полное описание директив есть в документации nginx.

Про HSTS — с осторожностью

Заголовок Strict-Transport-Security (RFC 6797) велит браузеру ходить на домен только по HTTPS в течение max-age секунд, даже если пользователь набрал http://. Это закрывает окно уязвимости на первом запросе.

Осторожность нужна с двумя вещами. Первое: includeSubDomains распространяется на все поддомены, включая внутренние сервисы, которые могут быть без сертификата, — они просто перестанут открываться. Второе: включать большой max-age стоит только после того, как HTTPS отработал без сбоев. Начните с небольшого значения, убедитесь, что всё работает, и только потом поднимайте до года.

Как проверить HTTPS у своего сайта

Проверка «замок есть — значит всё хорошо» пропускает большую часть реальных проблем. Ниже пять проверок, которые ловят почти всё.

1. Сертификат: имя, цепочка, срок

Смотрим, что сертификат выписан на нужные имена, цепочка полная, до истечения достаточно времени. Быстрее всего — через проверку SSL-сертификата: она разворачивает цепочку, показывает SAN, издателя, дату окончания и найденные проблемы. Локальный эквивалент — команды с openssl из раздела про сертификаты. Подробный разбор того, на что смотреть в выводе, есть в статье о проверке SSL-сертификата.

2. Редиректы: HTTP действительно уводит на HTTPS

Классическая ошибка — редирект настроен только для главной страницы, а внутренние адреса по HTTP отдают 200. Проверяем цепочку целиком, обязательно на внутреннем адресе, а не только на корне:

curl -sIL http://example.com/catalog/page | grep -Ei '^(HTTP/|location:)'

# одной строкой: конечный адрес, код и результат проверки сертификата
curl -sS -o /dev/null -L -w '%{http_code} %{ssl_verify_result} %{url_effective}\n' http://example.com

Значение ssl_verify_result, равное нулю, означает успешную проверку сертификата — но читать его имеет смысл, только если конечный адрес в выводе действительно начинается с https://. На обычном HTTP-соединении там тоже будет ноль, просто потому что проверять было нечего. Всю цепочку переходов с кодами удобно смотреть в проверке редиректов — там же видны лишние промежуточные хопы, которые стоит схлопнуть.

3. Заголовки безопасности

HTTPS — фундамент, но не весь дом. На нём стоят HSTS, политика Content-Security-Policy, флаги cookie Secure и HttpOnly. Полный набор отдаваемых заголовков показывает просмотр HTTP-заголовков, а оценку с рекомендациями — сканер безопасности.

curl -sSI https://example.com \
  | grep -iE 'strict-transport-security|content-security-policy|x-content-type-options'

4. Смешанный контент

Если страница отдаётся по HTTPS, но тянет картинку, скрипт или стиль по http://, браузер либо заблокирует ресурс, либо снимет замок. Грубая первичная проверка по исходному HTML:

curl -s https://example.com | grep -oE '(src|href)="http://[^"]+' | sort -u

Команда честно ловит только то, что есть в HTML: ресурсы, подгружаемые скриптами или из CSS, она не увидит. Полный разбор причин и способов починки — в статье о смешанном контенте.

5. Мониторинг срока действия

Просроченный сертификат — авария, которая случается в известную заранее дату и всё равно застаёт врасплох. Настройте мониторинг, чтобы получить уведомление за недели до истечения, а не звонок от клиента. Это же покрывает случай, когда автопродление молча сломалось: certbot отработал, а сервис не перечитал новый сертификат.

Частые вопросы

Что означает «что такое https yandex ru» или «https dzen ru» в поиске

Ничего особенного — это адрес сайта, случайно введённый в поисковую строку вместо адресной. Запись https://yandex.ru означает «сайт yandex.ru по защищённому протоколу», и точно так же читается любой другой адрес. Если поиск выдаёт что-то странное вместо перехода на сайт, скопируйте адрес в адресную строку браузера — обычно это верхнее поле окна.

HTTPS замедляет сайт

Рукопожатие добавляет один круг обмена при установке соединения, а шифрование современными шифрами на процессорах с аппаратной поддержкой практически бесплатно. При этом HTTPS открывает доступ к HTTP/2 и HTTP/3, которые дают мультиплексирование запросов и заметно выигрывают на страницах с большим числом ресурсов. На реальных сайтах итог обычно в пользу HTTPS. Проверить на своём проекте можно в тесте скорости.

Нужен ли HTTPS сайту-визитке без форм и оплаты

Да, и причины не только про пароли. Без HTTPS браузер помечает страницу как «Не защищено», часть возможностей браузера недоступна, провайдер технически может вставить в страницу свой скрипт или баннер, а форма обратной связи всё равно передаёт персональные данные. Плюс современные протоколы HTTP/2 и HTTP/3 без TLS в браузере не работают.

Бесплатный сертификат хуже платного

С точки зрения шифрования — нет, стойкость одинаковая. Разница в типе проверки (DV против OV и EV), в сроке действия и в том, что у платных сертификатов бывает страховка и поддержка. Посетитель разницы не видит: браузер показывает один и тот же замок.

Влияет ли HTTPS на позиции в поиске

Google публично называл HTTPS лёгким сигналом ранжирования, но рассчитывать на рост позиций от одной установки сертификата не стоит. Более ощутимый эффект — косвенный: отсутствие метки «Не защищено» и доступ к быстрым версиям протокола. Общее правило: HTTPS убирает повод потерять трафик, а не добавляет повода его получить.

Что делать, если браузер пишет «Ваше подключение не защищено»

Прочитайте код ошибки — он говорит о причине. Чаще всего это истёкший сертификат, несоответствие имени (зашли на www, а сертификат только на apex), неполная цепочка или сбитые часы на устройстве. Разбор конкретных кодов и что делать с каждым — в справочнике по ошибкам SSL.

Что даёт переход на TLS 1.3, если 1.2 работает

Более короткое рукопожатие, шифрование сертификата сервера и вычищенный набор шифров без устаревших конструкций. Держать оба — TLSv1.2 TLSv1.3 — нормальная практика: новые клиенты получат 1.3, старые не отвалятся. Подробнее — в статье об улучшениях TLS 1.3.

Чеклист: HTTPS настроен правильно

  • Сертификат валиден, не истёк, цепочка отдаётся полностью (fullchain, а не только сертификат сайта).
  • В SAN сертификата есть все используемые имена: и apex, и www.
  • Все четыре варианта адреса сходятся к одному каноническому через 301.
  • Редирект на HTTPS работает не только на главной, но и на внутренних адресах.
  • Включены только TLS 1.2 и TLS 1.3; устаревшие версии отключены.
  • Заголовок HSTS отдаётся, max-age поднят до большого значения только после проверки.
  • includeSubDomains включён осознанно — все поддомены умеют HTTPS.
  • Смешанного контента нет: страница не тянет ресурсы по http://.
  • Cookie помечены флагами Secure и HttpOnly.
  • Автопродление сертификата настроено и проверено, сервис перечитывает новый файл.
  • Настроено уведомление об истечении сертификата за несколько недель.
  • Вы понимаете, что замок подтверждает канал и домен, а не добросовестность сайта.

Проверьте ваш сайт прямо сейчас

Проверить SSL своего сайта →
Другие статьи: SSL/TLS
SSL/TLS
SSL Handshake Failed: причины ошибки и пошаговая диагностика
15.04.2026 · 1 444 просм.
SSL/TLS
ERR_CERT_AUTHORITY_INVALID: причины и как исправить
13.07.2026 · 695 просм.
SSL/TLS
Слабые cipher suites: как найти и отключить небезопасные шифры TLS
15.04.2026 · 600 просм.
SSL/TLS
TLS 1.3 vs TLS 1.2: что изменилось и как правильно мигрировать
15.04.2026 · 577 просм.