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.
Пример результата:
Конкретная версия зависит от используемого дистрибутива.
Если команда не найдена, необходимо установить пакет OpenSSL.
Для Ubuntu или Debian:
В RED OS используйте доступный в системе менеджер пакетов и соответствующий пакет OpenSSL.
Что нужно сделать: выполнить команду проверки версии и записать результат в отчёт.
Задание 2. Создание рабочего каталога¶
Создайте отдельный каталог для файлов практической работы:
Перейдите в созданный каталог:
Проверьте текущую директорию:
Команда pwd показывает полный путь к текущему каталогу.
Теперь создайте структуру для хранения закрытого ключа и сертификата:
Назначение каталогов:
| Каталог | Назначение |
|---|---|
private |
Хранение закрытого ключа |
certs |
Хранение сертификатов |
Задание 3. Создание закрытого ключа¶
Сгенерируйте RSA-ключ длиной 2048 бит:
Разберём команду:
| Параметр | Назначение |
|---|---|
genpkey |
Генерация закрытого ключа |
-algorithm RSA |
Выбор алгоритма RSA |
-pkeyopt rsa_keygen_bits:2048 |
Длина ключа 2048 бит |
-out 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. Проверка созданных файлов¶
Выполните:
Убедитесь, что созданы два файла:
Теперь проверьте типы файлов:
Закрытый ключ и сертификат — разные объекты, хотя они связаны друг с другом.
Задание 6. Просмотр информации о сертификате¶
Выполните команду:
Команда выводит подробную информацию о сертификате.
Найдите следующие поля:
- 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 сообщит об успешной проверке.
Дополнительно можно проверить, закончится ли срок действия в ближайшие 30 дней:
Здесь 2592000 — количество секунд в 30 днях.
Если сертификат истекает раньше указанного срока, проверка завершится ошибкой. Это полезный механизм для контроля сроков действия сертификатов.
Задание 8. Проверка соответствия ключа и сертификата¶
Необходимо убедиться, что сертификат содержит открытый ключ, соответствующий созданному закрытому ключу.
Получите открытый ключ из закрытого:
Получите открытый ключ из сертификата:
Сравните результаты:
Если файлы совпадают, команда сообщит об их идентичности.
Это подтверждает, что сертификат содержит соответствующий открытый ключ.
После проверки временные файлы можно удалить:
Задание 9. Проверка самоподписанного сертификата¶
Выполните:
Ожидаемый результат:
Почему сертификат проходит проверку?
Потому что мы явно указали этот сертификат в параметре -CAfile, то есть сообщили OpenSSL, что в рамках этой проверки ему следует доверять этому сертификату как корневому.
Это не означает, что сертификат автоматически стал доверенным для браузера или всей операционной системы.
Теперь выполните:
В зависимости от настроек системы проверка обычно завершится ошибкой, поскольку сертификат не связан с доверенным удостоверяющим центром в системном хранилище.
Если результат отличается, объясните в отчёте, какие настройки доверия могли повлиять на проверку.
Задание 10. Изучение цифровой подписи сертификата¶
Выполните:
Команда выведет SHA-256-отпечаток сертификата.
Отпечаток позволяет идентифицировать конкретный экземпляр сертификата и сравнивать его с другим экземпляром, полученным из доверенного источника.
Важно: отпечаток сертификата не является его цифровой подписью и сам по себе не доказывает подлинность владельца. Чтобы использовать отпечаток для проверки доверия, его значение необходимо получить по независимому доверенному каналу.
Задание 11. Изучение цифровой подписи сертификата¶
Сертификат был создан для доменного имени:
Проверьте соответствие имени сертификату:
Затем проверьте другое имя:
Первое имя должно соответствовать сертификату, а второе — нет.