Генерация сертификатов X.509 в криптографии

LinuxBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы изучите практические аспекты создания и управления сертификатами 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 и выпуска нового, действительного сертификата.

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