Linux Labs

Веб-стек / Ступень 4 из 9

Доверие, имя и срок сертификата

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 5 из 8 · теория · 4 мин

Новый сертификат с прежним ключом

На смену истёкшему сертификату выпускают новый, а ключ сайта обычно оставляют прежним.

У сертификата есть пара — закрытый ключ. Сервер хранит его у себя: у nginx это /etc/nginx/tls/secure.key, читать его может только root. Ключом сервер в начале TLS доказывает, что сертификат его. Открытая половина ключа записана в самом сертификате.

Новый сертификат выпускают в два шага. Сначала на сервере создают запрос на сертификат, CSR: открытый ключ, subject и SAN, подписанные закрытым ключом. Потом CA проверяет запрос и выпускает по нему сертификат — со своим issuer, новым сроком и своей подписью. Для secure.lab.test это две команды; учебный CA лежит в ~/tls-lab, а в жизни его ключ хранят те, кто выпускает сертификаты:

bash
cd ~/tls-lab
sudo openssl req -new -key /etc/nginx/tls/secure.key \
  -subj "/CN=secure.lab.test" \
  -addext "subjectAltName=DNS:secure.lab.test" \
  -out secure.csr
openssl x509 -req -in secure.csr -CA ca.crt -CAkey ca.key \
  -days 90 -copy_extensions copy -out secure-new.crt

-subj задаёт subject, -addext — SAN, -days — срок. -copy_extensions copy переносит SAN из запроса в сертификат.

Готовый файл nginx начнёт отдавать, когда перечитает конфигурацию: после замены файла — sudo systemctl reload nginx, а затем снова s_client или curl.

Проверь себя 1 вопрос

Ты подписал запрос без -copy_extensions copy, и openssl x509 -in new.crt -noout -ext subjectAltName печатает No extensions in certificate. Что сделаешь?

  • nginx отдаёт файл как есть. Имён нет в самом сертификате — reload их не добавит.

  • Ключ и запрос в порядке: SAN в запросе есть — его покажет openssl req -in x.csr -noout -text. Имена не перенесла подпись.

  • curl сверяет имя из адреса с SAN. Сертификат без SAN он отвергнет с no alternative certificate subject name.

SAN — расширение запроса, и в сертификат оно попадает, только если подпись его переносит. Ключ и запрос остаются прежними, перевыпустить нужно только сертификат.

Главное в шаге

  • Закрытый ключ остаётся на сервере, в сертификат попадает его открытая половина.
  • Новый сертификат — это запрос CSR от прежнего ключа и подпись CA с новым сроком.
  • Новый файл nginx отдаёт после systemctl reload nginx: проверяй то, что видит клиент.
Ubuntu 24.04
Загрузка…