Введение
В этой лабораторной работе вы изучите практические аспекты создания и управления сертификатами X.509 — краеугольным камнем современной цифровой безопасности. Сертификаты X.509 — это цифровые документы, которые связывают открытый ключ с идентификатором, например, с человеком или сервером, и являются основой для таких протоколов, как TLS/SSL, используемых для защиты веб-трафика.
Используя мощный инструмент командной строки openssl, вы научитесь выполнять основные задачи по управлению сертификатами. Вы начнете с понимания структуры сертификата, затем создадите самоподписанный сертификат для целей разработки. После этого вы сгенерируете Запрос на подпись сертификата (CSR) и выступите в роли простого Центра сертификации (CA) для его подписи, получив доверенный сертификат в вашей собственной системе.
К концу этой лабораторной работы у вас будет прочное практическое понимание жизненного цикла сертификата.
Обзор сертификатов X.509
На этом этапе мы рассмотрим базовую теорию, лежащую в основе сертификатов X.509. Здесь нет команд для выполнения; этот раздел предназначен для вашего понимания, прежде чем мы приступим к практическим заданиям.
Сертификат X.509 — это стандартизированный цифровой документ, содержащий важную информацию для установления доверия. Его основные компоненты включают:
- Subject (Субъект): Идентификационные данные владельца сертификата (например, лицо, имя сервера, такое как
www.example.com). - Issuer (Издатель): Сущность, которая проверила личность и подписала сертификат (Центр сертификации, или CA).
- Public Key (Открытый ключ): Открытый ключ, соответствующий закрытому ключу субъекта.
- Validity Period (Срок действия): Даты (
Not BeforeиNot After), в течение которых сертификат действителен. - Signature (Подпись): Цифровая подпись издателя, которая гарантирует подлинность сертификата.
Самоподписанный сертификат (Self-signed certificate) — это особый тип сертификата, в котором издатель и субъект совпадают. По сути, сертификат подписывает сам себя. Хотя такие сертификаты не вызывают доверия у публичных браузеров или систем (поскольку они не проверены известным CA), они чрезвычайно полезны для внутреннего тестирования, сред разработки или частных сетей, где вы контролируете как клиент, так и сервер.
На следующем шаге вы создадите свой собственный самоподписанный сертификат.
Создание самоподписанного сертификата
На этом шаге вы создадите самоподписанный сертификат. Для упрощения процесса в директории ~/project для вас уже сгенерирован закрытый ключ с именем private.pem. Вы будете использовать этот ключ для создания сертификата.
Команда openssl req используется для создания и обработки запросов на сертификат. Разберем используемые нами флаги:
-new: Генерирует новый запрос на сертификат.-x509: Выводит самоподписанный сертификат вместо запроса на сертификат.-key private.pem: Указывает используемый закрытый ключ.-out cert.pem: Указывает имя выходного файла для сертификата.-days 365: Устанавливает срок действия сертификата в 365 дней.-subj "...": Предоставляет информацию о субъекте в неинтерактивном режиме.
Теперь выполните следующую команду в терминале для создания сертификата:
openssl req -new -x509 -key private.pem -out cert.pem -days 365 -subj "/C=US/ST=California/L=Mountain View/O=MyOrg/CN=example.com"
Эта команда не выдаст никакого вывода, но она создаст новый файл. Вы можете убедиться, что файл cert.pem создан, просмотрев список файлов в текущей директории:
ls
В выводе вы должны увидеть cert.pem вместе с предварительно сгенерированными файлами.
ca-key.pem ca.pem cert.pem private.pem
Просмотр сведений о сертификате
На этом шаге вы проверите содержимое только что созданного самоподписанного сертификата. Это позволит вам убедиться в его деталях и понять его структуру в удобочитаемом формате.
Мы будем использовать команду openssl x509, предназначенную для просмотра и обработки файлов сертификатов.
-in cert.pem: Указывает входной файл сертификата.-text: Выводит полные сведения о сертификате в текстовом формате.-noout: Запрещает команде выводить закодированную версию сертификата.
Выполните следующую команду для просмотра сведений о cert.pem:
openssl x509 -in cert.pem -text -noout
Вывод будет довольно длинным, но прокрутите его и обратите внимание на следующие ключевые поля:
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
...
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, ST = California, L = Mountain View, O = MyOrg, CN = example.com
Validity
Not Before: ...
Not After : ...
Subject: C = US, ST = California, L = Mountain View, O = MyOrg, CN = example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
...
Exponent: 65537 (0x10001)
...
Обратите внимание, что поля Issuer (Издатель) и Subject (Субъект) идентичны. Это определяющая характеристика самоподписанного сертификата.
Генерация запроса на подпись сертификата (CSR)
На этом шаге вы сгенерируете Запрос на подпись сертификата (Certificate Signing Request, CSR). CSR — это блок закодированного текста, содержащий ваш открытый ключ и информацию о вашей идентификации. Вы отправляете CSR в Центр сертификации (Certificate Authority, CA) для запроса подписанного цифрового сертификата.
Мы снова будем использовать команду openssl req, но на этот раз без флага -x509, чтобы она создала CSR вместо самоподписанного сертификата.
-new: Указывает на новый запрос.-key private.pem: Использует ваш существующий закрытый ключ.-out csr.pem: Указывает имя выходного файла для CSR.-subj "...": Предоставляет информацию об идентификации для запрашиваемого сертификата.
Выполните следующую команду для генерации CSR для вымышленного веб-приложения:
openssl req -new -key private.pem -out csr.pem -subj "/C=US/ST=New York/L=New York City/O=MyWebApp/CN=webapp.example.com"
Эта команда создаст новый файл с именем csr.pem. Вы можете проверить его создание с помощью команды ls:
ls
Теперь вы увидите csr.pem в вашей директории проекта.
ca-key.pem ca.pem cert.pem csr.pem private.pem
Этот CSR теперь готов к отправке в CA для подписи.
Подписание CSR
На этом заключительном шаге вы выступите в роли Центра сертификации (CA) для подписания CSR, созданного на предыдущем шаге. Для этой цели в вашей среде были предварительно сгенерированы простой сертификат CA (ca.pem) и соответствующий ему закрытый ключ (ca-key.pem).
Мы будем использовать команду openssl x509 -req для обработки CSR и выпуска нового сертификата.
-req: Указывает, что мы обрабатываем CSR.-in csr.pem: Входной файл CSR.-CA ca.pem: Сертификат CA, используемый для подписи.-CAkey ca-key.pem: Закрытый ключ CA, используемый для подписи.-out signed-cert.pem: Выходной файл для нового подписанного сертификата.-days 365: Устанавливает срок действия.-CAcreateserial: Создает и управляет файлом серийного номера (ca.srl), который требуется CA для отслеживания выданных сертификатов.
Выполните приведенную ниже команду для подписания CSR:
openssl x509 -req -in csr.pem -CA ca.pem -CAkey ca-key.pem -out signed-cert.pem -days 365 -CAcreateserial
Вы увидите вывод, подтверждающий успешную подпись:
Certificate request self-signature ok
subject=C = US, ST = New York, L = New York City, O = MyWebApp, CN = webapp.example.com
Теперь выведите список файлов, чтобы увидеть ваш недавно созданный сертификат, signed-cert.pem, и файл серийного номера, ca.srl.
ls
ca-key.pem ca.pem ca.srl cert.pem csr.pem private.pem signed-cert.pem
Вы можете просмотреть этот новый сертификат с помощью openssl x509 -in signed-cert.pem -text -noout. Вы заметите, что Issuer (Издатель) теперь является CA (CN=myca.com), а Subject (Субъект) — это идентификатор из вашего CSR (CN=webapp.example.com).
Резюме
В этой лабораторной работе вы получили практический опыт работы с основным жизненным циклом сертификатов X.509 с использованием инструмента openssl.
Вы успешно научились:
- Понимать основные компоненты сертификата X.509 и концепцию самоподписанных сертификатов.
- Создавать самоподписанный сертификат, подходящий для разработки и тестирования, с помощью
openssl req. - Проверять детали сертификата для подтверждения его содержимого с помощью
openssl x509. - Генерировать Запрос на подпись сертификата (CSR) для официального запроса сертификата у CA.
- Выступать в роли простого Центра сертификации для подписания CSR и выпуска нового, действительного сертификата.
Эти навыки необходимы любому, кто занимается системным администрированием, сетевой безопасностью или разработкой программного обеспечения, поскольку они закладывают основу для управления безопасными коммуникациями в различных приложениях.



