Linux Labs

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

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

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

Шаг 4 из 8 · на машине · 5 мин

Кому верит клиент

Срок и имя — две проверки из трёх. Третья — кто подписал сертификат.

Сертификат подписывает центр сертификации, CA, своим ключом — его имя стоит в issuer. Клиент верит подписи, если сертификат этого CA лежит в его хранилище доверия. В Ubuntu хранилище — файл /etc/ssl/certs/ca-certificates.crt: в нём корневые сертификаты публичных CA. Свой CA туда добавляют файлом в /usr/local/share/ca-certificates и командой update-ca-certificates — так на этой машине добавлен учебный Lab Root CA.

openssl verify проверяет файл сертификата так же, как curl: издателя по хранилищу и срок.

bash
openssl verify /etc/nginx/tls/shop.crt
openssl verify /etc/nginx/tls/secure.crt

Корневой сертификат CA подписан сам собой: subject и issuer у него одинаковые. Такой сертификат называют самоподписанным. Корню верят, потому что он лежит в хранилище, а самоподписанному сертификату сайта — только там, где его добавили в хранилище вручную. curl --cacert ca.crt проверяет издателя по одному этому файлу вместо хранилища.

Внимание

curl -k пропускает все три проверки и получит страницу у любого сервера. Чтобы узнать, отвечает ли nginx, он годится, но сайт не чинит: браузеры проверку не выключают.

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

Коллега для проверки выпустил сертификат test.lab.test сам себе — subject и issuer у него одинаковые, CN = test.lab.test. Срок и имя в порядке. Что напечатает curl https://test.lab.test/?

  • Срок в порядке по условию. Ошибка будет про издателя: test.lab.test нет в хранилище доверия.

  • Третья проверка не пройдёт: издателя test.lab.test нет в хранилище доверия. openssl verify такого файла пишет self-signed certificate.

  • Имя в порядке по условию. curl споткнётся о подпись: издателя нет в хранилище доверия.

Сертификат, подписанный сам собой, проверку издателя проходит, только если он сам лежит в хранилище доверия. Так устроены корневые сертификаты CA, а сертификату сайта место в хранилище нужно добавлять явно на каждом клиенте.

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

  • Клиент проверяет три вещи: издатель есть в хранилище доверия, имя из адреса есть в SAN, сейчас — между notBefore и notAfter.
  • Не прошла любая — curl завершается с кодом 60 и называет причину в тексте ошибки.
  • Свой CA добавляют в хранилище файлом в /usr/local/share/ca-certificates и командой update-ca-certificates.
Ubuntu 24.04
Загрузка…