Модуль 07 — HTTP и HTTPS

Что именно браузер говорит серверу и как убедиться, что сервер настоящий

Прогресс курса Модуль 7 из 9

Что вы освоите в этом модуле

01

URL

https://portal.nevabit.ru:443/course/view.php?idnumber=linux-basics#section-2
└─┬─┘   └───────┬───────┘ └┬┘ └──────┬──────┘ └─────────┬─────────┘ └───┬────┘
 схема         хост      порт     путь              параметры        фрагмент
ЧастьКто использует
СхемаБраузер: какой протокол, порт по умолчанию — 80 для http, 443 для https
ХостDNS — найти адрес; сервер — понять, какой из сайтов на этом адресе нужен (заголовок Host)
Путь и параметрыСервер: что отдать
Фрагмент #…Только браузер — на сервер не отправляется
02

Запрос и ответ

HTTP — текстовый протокол «запрос — ответ» поверх TCP. Опция -v у curl показывает, что уходит (>) и что приходит (<):

$ curl -v -s -o /dev/null https://nevabit.ru/
...
> GET / HTTP/1.1
> Host: nevabit.ru
> User-Agent: curl/8.14.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx
< Date: Wed, 14 Oct 2026 19:26:42 GMT
< Content-Type: text/html
< Content-Length: 23561
...

Запрос — строка «метод, путь, версия», затем заголовки и пустая строка; у POST после неё идёт тело. Ответ — строка состояния, заголовки, пустая строка и тело (страница, картинка, JSON).

МетодНазначение
GETПолучить ресурс. Не должен ничего менять на сервере
POSTОтправить данные: форма, создание записи
PUT, PATCHЗаменить, изменить ресурс (в API)
DELETEУдалить (в API)
HEADКак GET, но только заголовки — проверить, есть ли страница
03

Коды состояния

Первая цифра кода — класс ответа. По коду, ещё не читая страницу, понятно, на чьей стороне проблема.

КодЗначениеКогда встречается
200 OKУспехСтраница отдана
301, 302Перенаправление: адрес в заголовке LocationС http на https, сменился адрес страницы
304 Not ModifiedНе изменилось — берите из кэшаПовторная загрузка
400Неверный запросОшибка в данных клиента
401, 403Нужна авторизация / доступ запрещёнНет входа, нет прав
404 Not FoundРесурса нетОпечатка в адресе, удалённая страница
500Ошибка в приложении на сервереСмотреть журналы приложения
502, 504Прокси не получил ответ от приложения / не дождалсяПриложение за nginx упало или зависло
503Сервис временно недоступенПерегрузка, обслуживание
$ curl -sI http://nevabit.ru/ | head -1
HTTP/1.1 301 Moved Permanently
$ curl -sI https://nevabit.ru/no-such-page | head -1
HTTP/1.1 404 Not Found
$ curl -s -o /dev/null -w '%{http_code} %{time_total}s %{remote_ip}\n' https://nevabit.ru/linux-basics/
200 0.550812s 188.120.235.218

Последняя форма — готовая проверка для скриптов мониторинга: код, время ответа и адрес, на который ушёл запрос.

04

Заголовки

$ curl -sI https://nevabit.ru/
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html
Content-Length: 23561
Last-Modified: Wed, 14 Oct 2026 18:19:20 GMT
ETag: "6acfc7a8-5c09"
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
ЗаголовокСмысл
Host (запрос)Какой сайт нужен — на одном адресе их может быть сотни
Content-TypeТип тела: text/html, application/json, image/png
LocationКуда перейти при 3xx
Cache-Control, ETag, Last-ModifiedПравила кэширования, версия ресурса
Set-Cookie / CookieСервер выдаёт метку, браузер возвращает её с каждым запросом — так работает вход на сайт
Strict-Transport-Security«Год ходи ко мне только по HTTPS» — защита от подмены на http

Заголовок Host позволяет проверить сайт напрямую на сервере, минуя DNS, — например, новый сервер до переключения записи:

$ curl -s --resolve nevabit.ru:443:188.120.235.218 -o /dev/null -w '%{http_code}\n' https://nevabit.ru/
200
05

HTTPS и TLS

HTTP передаёт всё открытым текстом: пароль из формы виден любому на пути — в общем Wi-Fi, у провайдера. HTTPS — тот же HTTP внутри шифрованного канала TLS. TLS решает три задачи: конфиденциальность (шифрование), целостность (данные нельзя незаметно изменить) и подлинность (вы говорите именно с nevabit.ru, а не с подменой).

$ curl -v -s -o /dev/null https://nevabit.ru/ 2>&1 | grep '^\*'
*   Trying 188.120.235.218:443...
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / X25519MLKEM768 / id-ecPublicKey
* Server certificate:
*  subject: CN=nevabit.ru
*  start date: Oct 12 08:11:24 2026 GMT
*  expire date: Jan 10 08:11:23 2027 GMT
*  subjectAltName: host "nevabit.ru" matched cert's "nevabit.ru"
*  issuer: C=US; O=Let's Encrypt; CN=YE1
*  SSL certificate verify ok.

Клиент и сервер договариваются о версии TLS и шифре, сервер предъявляет сертификат, клиент проверяет его и вместе с сервером вычисляет общий ключ сеанса. Дальше — обычный HTTP, но зашифрованный.

06

Сертификат и цепочка доверия

Сертификат связывает имя сайта с открытым ключом сервера и подписан удостоверяющим центром (УЦ). Браузер проверяет: имя совпадает с адресом, срок не истёк, подпись ведёт к корневому сертификату, которому доверяет система.

$ openssl s_client -connect nevabit.ru:443 -servername nevabit.ru -showcerts </dev/null 2>/dev/null | grep -E '^ *[0-9] s:|^ *i:'
 0 s:CN=nevabit.ru
   i:C=US, O=Let's Encrypt, CN=YE1
 1 s:C=US, O=Let's Encrypt, CN=YE1
   i:C=US, O=ISRG, CN=Root YE
 2 s:C=US, O=ISRG, CN=Root YE
   i:C=US, O=Internet Security Research Group, CN=ISRG Root X2
 3 s:C=US, O=Internet Security Research Group, CN=ISRG Root X2
   i:C=US, O=Internet Security Research Group, CN=ISRG Root X1

s: — кому выдан, i: — кто подписал. Сертификат сайта подписан промежуточным центром Let's Encrypt, тот — корневым. Корневые сертификаты поставляются с ОС и браузером: в Debian — пакет ca-certificates, каталог /etc/ssl/certs. Let's Encrypt выдаёт сертификаты бесплатно на 90 дней с автоматическим продлением — так работает и этот сайт.

ОшибкаПричина
certificate has expiredСертификат просрочен — не продлили. Или неверное время на клиенте
certificate subject name does not matchСертификат выдан на другое имя: зашли по IP или на поддомен, которого нет в сертификате
unable to get local issuer certificateСервер не отдал промежуточный сертификат, или корень неизвестен клиенту
self-signed certificate in certificate chainКорень цепочки не входит в доверенные у клиента
07

Сертификаты НУЦ Минцифры

С 2022 года часть иностранных УЦ отзывает и не выдаёт сертификаты российским организациям. Минцифры создало Национальный удостоверяющий центр, корневой сертификат «Russian Trusted Root CA». Им подписаны сайты ряда банков и госсервисов. В стандартные хранилища Debian, Windows и большинства браузеров этот корень не входит:

$ curl -sS -I https://online.sberbank.ru/
curl: (60) SSL certificate problem: self-signed certificate in certificate chain
$ openssl s_client -connect online.sberbank.ru:443 -servername online.sberbank.ru </dev/null 2>/dev/null | openssl x509 -noout -issuer
issuer=C=RU, O=The Ministry of Digital Development and Communications, CN=Russian Trusted Sub CA

Чтобы такие сайты открывались, корневой сертификат устанавливают в систему: скачивают с Госуслуг (раздел о сертификатах безопасности), кладут в /usr/local/share/ca-certificates/ с расширением .crt и выполняют sudo update-ca-certificates. Яндекс Браузер и браузеры на основе отечественных сборок доверяют ему сразу. Это решение организации: добавленный корень позволяет его владельцу выпускать сертификаты на любые сайты, поэтому в корпоративной сети его ставят по политике безопасности, а не по просьбе пользователя.

Никогда не «чините» ошибку сертификата отключением проверки (curl -k, verify=False) в рабочих скриптах. Проверка — единственное, что отличает настоящий сервер от подменённого. Отключать её можно только на минуту, чтобы посмотреть, что сервер отдаёт.

Ключевые выводы модуля

Запомните главное

  • HTTP — текст «метод путь версия», заголовки, пустая строка, тело; ответ — с кодом состояния
  • 2xx — успех, 3xx — перенаправление, 4xx — ошибка клиента, 5xx — ошибка сервера
  • curl -sI — заголовки, -v — весь обмен, -w '%{http_code}' — для скриптов, --resolve — в обход DNS
  • HTTPS = HTTP внутри TLS: шифрование, целостность, подлинность
  • Сертификат проверяется по имени, сроку и цепочке до доверенного корня
  • Корень НУЦ Минцифры ставят в систему через update-ca-certificates; проверку сертификатов не отключают
Практические задания — на учебном портале. Задания, критерии оценивания, сдача работ и оценки преподавателя — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.
Модуль 06: DNS и DHCP Все модули Модуль 08: Диагностика