Перейти к содержанию

12.1 Создание самоподписанного сертификата в Linux

Тема работы

Создание и анализ самоподписанного цифрового сертификата в операционной системе Linux с использованием OpenSSL.

Цель работы

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

Задачи работы

В ходе выполнения практической работы необходимо: 1. Изучить назначение OpenSSL. 2. Проверить наличие OpenSSL в системе. 3. Создать рабочий каталог для сертификатов. 4. Сгенерировать закрытый ключ. 5. Создать самоподписанный сертификат. 6. Просмотреть информацию о сертификате. 7. Проверить срок действия сертификата. 8. Проверить соответствие открытого ключа закрытому. 9. Объяснить отличие самоподписанного сертификата от сертификата, выданного доверенным удостоверяющим центром.

Оборудование и программное обеспечение

  • Компьютер или виртуальная машина с Linux.
  • Терминал Linux.
  • Утилита OpenSSL.
  • Учётная запись, позволяющая выполнять команды в домашнем каталоге пользователя.

Работа может выполняться в Ubuntu, Debian, RED OS и других дистрибутивах Linux. Названия пакетов и команды установки могут различаться.

Что такое OpenSSL

OpenSSL — набор программных инструментов и библиотек для работы с криптографией и протоколами защищённого взаимодействия.

С помощью OpenSSL можно: - создавать закрытые ключи; - формировать сертификаты; - просматривать содержимое сертификатов; - проверять цифровые подписи; - проверять сроки действия; - выполнять другие криптографические операции.


Ход работы

Задание 1. Проверка наличия OpenSSL

Откройте терминал и выполните команду:

openssl version

Команда выводит установленную версию OpenSSL.

Пример результата:

OpenSSL 3.x.x ...

Конкретная версия зависит от используемого дистрибутива.

Если команда не найдена, необходимо установить пакет OpenSSL.

Для Ubuntu или Debian:

sudo apt update
sudo apt install openssl

В RED OS используйте доступный в системе менеджер пакетов и соответствующий пакет OpenSSL.

Что нужно сделать: выполнить команду проверки версии и записать результат в отчёт.

Задание 2. Создание рабочего каталога

Создайте отдельный каталог для файлов практической работы:

mkdir -p ~/certificate-lab

Перейдите в созданный каталог:

cd ~/certificate-lab

Проверьте текущую директорию:

pwd

Команда pwd показывает полный путь к текущему каталогу.

Теперь создайте структуру для хранения закрытого ключа и сертификата:

mkdir -p private certs

Назначение каталогов:

Каталог Назначение
private Хранение закрытого ключа
certs Хранение сертификатов

Задание 3. Создание закрытого ключа

Сгенерируйте RSA-ключ длиной 2048 бит:

openssl genpkey \
  -algorithm RSA \
  -pkeyopt rsa_keygen_bits:2048 \
  -out private/server.key

Разберём команду:

Параметр Назначение
genpkey Генерация закрытого ключа
-algorithm RSA Выбор алгоритма RSA
-pkeyopt rsa_keygen_bits:2048 Длина ключа 2048 бит
-out private/server.key Путь сохранения ключа

Установите права доступа:

chmod 600 private/server.key

Проверьте права:

ls -l private/server.key

Файл должен быть доступен для чтения и записи владельцу, но не для остальных пользователей.

Пример:

-rw------- 1 user user ... private/server.key

Почему это важно?

Закрытый ключ должен храниться в секрете. Если посторонний пользователь получит его, он сможет использовать ключ в тех криптографических операциях, для которых он предназначен.

Задание 4. Создание самоподписанного сертификата

Создайте сертификат со сроком действия 365 дней:

openssl req -new -x509 \
  -key private/server.key \
  -out certs/server.crt \
  -days 365 \
  -sha256 \
  -subj "/C=RU/O=Educational Lab/CN=server.example.test" \
  -addext "subjectAltName=DNS:server.example.test" \
  -addext "basicConstraints=critical,CA:FALSE" \
  -addext "keyUsage=critical,digitalSignature" \
  -addext "extendedKeyUsage=serverAuth"

Команда создаёт самоподписанный сертификат на основе ранее созданного закрытого ключа.

Разберём параметры:

Параметр Назначение
req Работа с запросами на сертификат и связанными операциями
-new Создание нового объекта сертификата
-x509 Выпуск самоподписанного сертификата формата X.509
-key Использование указанного закрытого ключа
-out Путь сохранения сертификата
-days 365 Срок действия 365 дней
-sha256 Использование SHA-256 для подписи
-subj Указание данных субъекта сертификата
-addext Добавление расширения сертификата

Параметры субъекта: - C=RU — код страны; - O=Educational Lab — название учебной организации или лаборатории; - CN=server.example.test — общее имя субъекта.

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

Расширение basicConstraints указывает, что сертификат не предназначен для использования в качестве удостоверяющего центра.

Расширения keyUsage и extendedKeyUsage задают назначение ключа и сертификата.

Домен server.example.test используется в качестве учебного примера. Это не реальный сайт организации.

Если установленная версия OpenSSL не поддерживает параметр -addext, используйте конфигурационный файл OpenSSL для задания SAN и остальных расширений.

Задание 5. Проверка созданных файлов

Выполните:

ls -l private/
ls -l certs/

Убедитесь, что созданы два файла:

private/server.key
certs/server.crt

Теперь проверьте типы файлов:

file private/server.key
file certs/server.crt

Закрытый ключ и сертификат — разные объекты, хотя они связаны друг с другом.

Задание 6. Просмотр информации о сертификате

Выполните команду:

openssl x509 \
  -in certs/server.crt \
  -noout \
  -text

Команда выводит подробную информацию о сертификате.

Найдите следующие поля: - Issuer — издатель сертификата; - Subject — субъект сертификата; - Validity — срок действия; - Not Before — начало действия; - Not After — окончание действия; - Public Key Algorithm — алгоритм открытого ключа; - Signature Algorithm — алгоритм подписи; - Subject Alternative Name — альтернативные имена; - Basic Constraints — ограничения сертификата; - Extended Key Usage — расширенное назначение.

Поскольку сертификат самоподписанный, поля Issuer и Subject будут соответствовать друг другу.

Запишите в отчёт: 1. Имя субъекта сертификата. 2. Имя издателя. 3. Дату окончания действия. 4. Алгоритм открытого ключа. 5. Доменное имя в SAN.

Задание 7. Проверка срока действия

Выполните:

openssl x509 \
  -in certs/server.crt \
  -noout \
  -dates

Команда покажет даты начала и окончания действия сертификата.

Теперь проверьте, действует ли сертификат в настоящий момент:

openssl x509 \
  -in certs/server.crt \
  -noout \
  -checkend 0

Если сертификат действует и не истёк, OpenSSL сообщит об успешной проверке.

Дополнительно можно проверить, закончится ли срок действия в ближайшие 30 дней:

openssl x509 \
  -in certs/server.crt \
  -noout \
  -checkend 2592000

Здесь 2592000 — количество секунд в 30 днях.

Если сертификат истекает раньше указанного срока, проверка завершится ошибкой. Это полезный механизм для контроля сроков действия сертификатов.

Задание 8. Проверка соответствия ключа и сертификата

Необходимо убедиться, что сертификат содержит открытый ключ, соответствующий созданному закрытому ключу.

Получите открытый ключ из закрытого:

openssl pkey \
  -in private/server.key \
  -pubout \
  -out private/public-from-key.pem

Получите открытый ключ из сертификата:

openssl x509 \
  -in certs/server.crt \
  -pubkey \
  -noout \
  -out certs/public-from-cert.pem

Сравните результаты:

diff -s private/public-from-key.pem certs/public-from-cert.pem

Если файлы совпадают, команда сообщит об их идентичности.

Это подтверждает, что сертификат содержит соответствующий открытый ключ.

После проверки временные файлы можно удалить:

rm private/public-from-key.pem certs/public-from-cert.pem

Задание 9. Проверка самоподписанного сертификата

Выполните:

openssl verify \
  -CAfile certs/server.crt \
  certs/server.crt

Ожидаемый результат:

certs/server.crt: OK

Почему сертификат проходит проверку?

Потому что мы явно указали этот сертификат в параметре -CAfile, то есть сообщили OpenSSL, что в рамках этой проверки ему следует доверять этому сертификату как корневому.

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

Теперь выполните:

openssl verify certs/server.crt

В зависимости от настроек системы проверка обычно завершится ошибкой, поскольку сертификат не связан с доверенным удостоверяющим центром в системном хранилище.

Если результат отличается, объясните в отчёте, какие настройки доверия могли повлиять на проверку.

Задание 10. Изучение цифровой подписи сертификата

Выполните:

openssl x509 \
  -in certs/server.crt \
  -noout \
  -fingerprint \
  -sha256

Команда выведет SHA-256-отпечаток сертификата.

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

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

Задание 11. Изучение цифровой подписи сертификата

Сертификат был создан для доменного имени:

server.example.test

Проверьте соответствие имени сертификату:

openssl x509 \
  -in certs/server.crt \
  -noout \
  -checkhost server.example.test

Затем проверьте другое имя:

openssl x509 \
  -in certs/server.crt \
  -noout \
  -checkhost other.example.test

Первое имя должно соответствовать сертификату, а второе — нет.