OpenSSL: Principles, Certificate Creation, and Audit PDF

Summary

This document provides an in-depth guide on OpenSSL, covering its principles of operation, certificate creation, auditing, and various commands. It discusses topics like generating certificates, using commands, understanding Subject Alternative Name (subjectAltName), and more. It also delves into certificate formats, conversions, and verification.

Full Transcript

06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru HackWare.ru ГЛАВНАЯ WI-FI ДЛЯ KALI КНИГИ ВСЕ СТАТЬИ ФОРУМ...

06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru HackWare.ru ГЛАВНАЯ WI-FI ДЛЯ KALI КНИГИ ВСЕ СТАТЬИ ФОРУМ ПОДПИС OpenSSL: принципы работы, создание НОВЫЕ сертификатов, аудит Email* Оглавление SUBMIT 1. OpenSSL: инструкция по использованию и аудит безопасности 2. Что такое OpenSSL и для чего используется ПОДПИС 3. Как работают SSL сертификаты ТЕЛЕГРА 4. Как генерировать сертификаты в OpenSSL Уведомления 5. Какую команду использовать, genpkey или genrsa статей на Телеграмме: t.m 6. Как пользоваться OpenSSL (команды OpenSSL) 7. Как создать сертификаты SSL (TLS) для сайтов ПОИСК 7.1 Веб-браузеры используют имя хоста из Subject Alternative Name (subjectAltName) 7.2 Как создать самоподписанный сертификат с Subject Alternative Name (subjectAltName) 7.3 Синтаксис Subject Alternative Name (subjectAltName). Как создать валидные сертификаты для IP и IPv6 7.4 Как посмотреть Subject Alternative Name (subjectAltName) в сертификате СВЕЖИЕ 7.5 Проверка Subject Alternative Name (subjectAltName) Как проверит 7.6 Официальная документация по Subject Alternative Name (subjectAltName) сайт HSTS и HS 8. Рецепты и советы по генерации SSL сертификатов Продвинутая 8.1 Создание запроса на подпись (CSR) из существующих сертификатов Puppeteer: JavaScript, за 8.2 Автоматическая генерация CSR захода на са 8.3 Создание сертификатов, действительных для нескольких имён хостов ошибках, ожи страницы 8.4 Самоподписанный сертификат Работа с DOM 8.5 Как получить бесплатный валидный сертификат для сайта получить HTM 9. Просмотр содержимого ключей и сертификатов различные те ссылки) 10. Форматы ключей и сертификатов Как пользов 11. Конвертация ключей и сертификатов установка и бы 11.1 PEM и DER преобразование TLS fingerpr типы хешей, у 11.2 Конвертация PKCS#12 (PFX) TLS отпечатко 11.3 Конвертация PKCS#7 12. Где хранятся корневые сертификаты Центров Сертификации (CA) в операционной системе СВЕЖИЕ КО 12.1 Корневые сертификаты Центров Сертификации (CA) в Linux Владимир к 12.1.1 Общесистемные корневые CA сертификаты веб-сервера ( 12.1.2 Mozilla Network Security Services (NSS) 9.0, PHP 8, Windows 1 12.1.3 Google Chrome / Chromium сентябрь 2024 12.1.4 Firefox Владимир к 12.1.5 Thunderbird веб-сервера ( 9.0, PHP 8, 12.1.6 Как проверить, какие добавлены сертификаты в файлы cert9.db Windows 1 12.2 Корневые сертификаты Центров Сертификации (CA) в Windows сентябрь 2024 https://hackware.ru/?p=12982 1/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru 12.2.1 Общесистемные корневые CA сертификаты Alexey к за (suip.biz): Инст 12.2.2 Google Chrome онлайн 12.2.3 Opera Владимир к 12.2.4 Firefox веб-сервера ( 9.0, PHP 8, 13. Как добавить корневой сертификат в доверенные Windows 1 13.1 Как добавить корневой сертификат в доверенные в Linux сентябрь 2024 13.1.1 Как добавить корневой сертификат в доверенные в Linux на уровне системы Владимир к веб-сервера ( 13.1.2 Как добавить корневой сертификат в доверенные в Linux в веб браузеры 9.0, PHP 8, 13.2 Как добавить корневой сертификат в доверенные в Windows Windows 1 сентябрь 2024 13.2.1 Как добавить корневой сертификат в доверенные в Windows на уровне системы 13.2.2 Как добавить корневой сертификат в доверенные в Windows в веб браузеры Онлай 14. Цепи сертификатов 15. Верификация (проверка) сертификатов Ау 16. Проверка настройки HTTPS безопасн 17. Как создать Корневой Центр Сертификации (Root CA) се 18. Шифрование файлов в OpenSSL с Kal 18.1 Симметричное шифрование файлов в OpenSSL 18.2 Как зашифровать строки в OpenSSL (симметричное шифрование) РУБ 18.3 Асимметричное шифрование файлов в OpenSSL IT криминалис 19. Пининг сертификатов (pinning) Sniffing и Spoo 20. Словарь основных терминов OpenSSL Анонимность, 21. Программы для проверки настроек SSL и сбора информации данных и анти Атака на паро OpenSSL: инструкция по использованию и аудит Беспроводные безопасности Веб приложен Знаете ли вы, что один единственный корневой сертификат хакера, установленный в вашу Железо систему, фактически лишает её защиты с помощью шифрования SSL (TLS)? Знаете ли вы, что на Защита самом деле для передачи основных данных браузеры не используют ассиметричное Инструменты шифрование (с помощью сертификатов), а используют симметричное (парольная фраза)? Задумывались ли вы, можете ли Удостоверяющий Центр, выдавший SSL сертификат, Книги расшифровать при желании передаваемый на сайт трафик? Почему VNC сессия, защищённая Новости самодельным сертификатом, считается надёжной, а подключение к сайту, использующего такой Новости сайта же сертификат, нет? Почему для сайтов не подходят самодельные сертификаты? Знаете ли вы, что в вашей системе уже установлены сотни корневых сертификатов различных Центров Обратный инж Engineering) Сертификации которым безоговорочно доверяют веб браузеры и другие приложения? Поддержка до В этой статье мы разберёмся, как работает SSL (TLS) шифрование, как пользоваться утилитами OpenSSL, как создавать свои собственные ключи и Центры Сертификации, как подписывать Рабочая среда сертификаты для сайтов, как просмотреть детальную информацию о сертификате и ключе, как Сбор информа конвертировать сертификаты в различные форматы и как проверить различные аспекты Языки програм безопасности SSL (TLS), как проверить, какие сертификаты установлены в качестве доверенных корневых, как добавить новый доверенный сертификат или удалить сертификат из доверенных.. МЕ Что такое OpenSSL и для чего используется aircrack-ng Airodump-ng OpenSSL — это криптографический инструментарий, реализующий сетевые протоколы Secure DNS IP Kali Sockets Layer (SSL v2/v3) и Transport Layer Security (TLS v1) и соответствующие им стандарты Linux Mint MySQL криптографии. (Hashcat) P https://hackware.ru/?p=12982 2/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru Программа openssl — это инструмент командной строки для использования различных криптографических функций криптографической библиотеки OpenSSL в консоли. Основны Windows возможности: WPA2 WPS Ко Linux Командна Создание и управление закрытыми ключами, открытыми ключами и параметрами. автоматизированн Криптографические операции с открытым ключом Создание сертификатов X.509, CSR и CRL методом пер Расчёт дайджестов сообщений силой - б Шифрование и дешифрование с помощью шифров Клиентские и серверные тесты SSL/TLS атака на бе Обработка подписанной или зашифрованной почты S/MIME сети Wi-F Запросы отметок времени, генерация и проверка посередине (Man- веб-браузеры веб Как работают SSL сертификаты сайты Сгенерированные в OpenSSL ключи могут использоваться для шифрования различных данных, компьютерные но самое популярное использование — шифрование в HTTPS протоколе, где используется ограничений и ассиметричное шифрование, это означает, что для шифрования используется один ключ, а для расшифровки — второй ключ. Эти ключи называются: пароли прокс проблем роуте приватный ключ публичный ключ (handshake) Как можно понять из названия, публичный ключ не является секретным. Он свободно информаци распространяется и используется для шифрования данных, которые можно расшифровать сканирование только приватным ключом. сканирование Linux уязвимости ш Публичный и приватный ключ генерируются вмести и криптографически связаны. Ещё данная пара ключей может использоваться для подписи данных и проверки подписи. Эта подпись подтверждает то, что данные удостоверены владельцем приватного ключа и в последствии эти данные не были изменены. Подписываются данные приватным ключом (которые имеет одно определённое лицо), а проверить подпись можно публичным ключом, который может получить каждый. Любой может сгенерировать пару ключей, поэтому возникает проблема идентификации — как проверить, что публичный ключ выпущен определённым лицом? Это можно было бы сделать например так: владелец сайт mysite.org генерирует пару публичный-приватный ключ и просит третью сторону подписать его публичный ключ. В результате публичный ключ распространяется с цифровой подписью, которую можно проверить публичным ключом третьей стороны. На самом деле, всё именно так и происходит, а подписанный публичный ключ, вместе с дополнительной информацией (например, название домена, для которого он подписан) упаковываются в сертификат. Сертификат, по сути, это публичный ключ, а также информация о домене и другая сопутствующая информация, подписанная электронной подписью. В результате процедура создания сертификата выглядит так: 1. Владельцем сайта генерируется пара приватный и публичный ключ. 2. Публичный ключ вместе с другой информацией для подписи (например, название доменного имени) упаковывается в файл в специальном формате. Он называется — Certificate Signing Request (CSR), то есть «запроса на подпись сертификата». 3. Данный запрос на подпись (CSR) отправляется в Центр Сертификации (CA), который, используя свой приватный корневой ключ, создаёт подпись для этих данных и всё это упаковывается в другой специальный файл, называемый сертификат. В результате получается сертификат со следующими свойствами: 1. Он может зашифровать данные (в нём есть публичный ключ), которые способен расшифровать только приватный ключ составляющий пару этому сертификату 2. Сертификат может быть проверен на подлинность (у него есть цифровая подпись) с помощью сертификата Центр Сертификации (CA), который его создал При подключении к сайту пользователи получают свою копию сертификата этого сайта, и браузер автоматически проверяет её по доверенным корневым сертификатам, которые содержаться в операционной системе или хранятся в веб браузере. После этого браузер шифрует с помощью сертификата сайта данные и отправляет их на сервер, эти данные может расшифровать только владелец приватного ключа, то есть сервер. Таким https://hackware.ru/?p=12982 3/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru образом происходит согласование ключа, используемого для последующего шифрования. Как генерировать сертификаты в OpenSSL На самом деле, приватный ключ веб-сервера и приватный ключ Центр Сертификации (CA) по своей природе ничем не отличаются — они генерируются одной и той же командой. Но Центр Сертификации (CA) имеет особый статус постольку: 1. Его приватный ключ используется для подписи сертификатов (поэтому он называется корневым, хотя в физическом смысле не отличается от приватного ключа сервера) 2. Его публичный ключ (сертификат) добавлен на компьютеры всех пользователей в качестве доверенного 3. Цифровая подпись в сертификате не предназначена для проверки третьей стороной, поскольку сертификат является самоподписанным. Единственное отличие самоподписанного сертификата из Центр Сертификации (CA) от того, который вы можете сгенерировать сами, в том, что он у вас размещён среди доверенных (в операционной системе или в браузере). Вы можете самостоятельно созданный самоподписанный сертификат разместить среди доверенных, и он будет иметь точно такую же силу как и корневой сертификат из Центр Сертификации (CA) Вернёмся к процедуре подписи, а фактически создания сертификата сервера — создаваемый сертификат должен быть криптографически связан с приватным ключом сервера. Но приватный ключ должен быть известен исключительно его владельцу (серверу). Выходом из данной ситуации является использования уже упомянутого Certificate Signing Request (CSR), то есть «запроса на подпись сертификата». То есть Центру Сертификации передаеъётся публичный ключ и название домена, но приватный ключ остаётся в тайне. Именно в этом смысл существования CSR. В учебных целях вы можете создать свои корневые ключи и даже свой «Центр Сертификации (CA)». Затем создадим пару приватный и публичный ключ сервера. Используя ключ сервера мы создадим запрос на подпись сертификата (CSR). Приватным ключом CA мы подпишем (создадим) сертификат для сервера. Также мы научимся добавлять свой корневой сертификат в доверенные, проверять и управлять уже присутствующими доверенными сертификатами. Какую команду использовать, genpkey или genrsa В пакете OpenSSL есть две команды, которые выполняют очень похожее действие — генерируют пару приватный-публичный ключ RSA: 1 openssl genpkey -algorithm RSA 2 openssl genrsa На самом деле, форматы создаваемых этими программами RSA ключей немного различаются. Команда genpkey заменяет команду genpkey, а также ещё две команды: gendh и gendsa. То есть использовать надо genpkey с которой нужно указать алгоритм ключа опцией - algorithm. Как пользоваться OpenSSL (команды OpenSSL) Команды OpenSSL не столько сложные, сколько запутанные. Во-первых, их много (48 основных команд, 28 digest команд, 84 cipher команды, а также алгоритмы и методы), некоторые из них выполняют более чем одну функцию, некоторые имеют пересекающиеся функции и не всегда непонятно, какую команду выбрать. Синтаксис использования команд OpenSSL: 1 openssl КОМАНДА ОПЦИИ Ещё один пример как команды OpenSSL могут сбить с толку: у команды x509 есть опция -req, а у команды req есть опция -x509. Если вы хотите получить справку по командам OpenSSL, то вам нужно знать, что это делается так: 1 man openssl-КОМАНДА 2 # ИЛИ 3 man КОМАНДА Например: https://hackware.ru/?p=12982 4/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru 1 man openssl-req 2 man openssl-x509 3 man openssl-genpkey 4 man openssl-enc 5 man openssl-rsa 6 # ИЛИ 7 man req 8 man x509 9 man genpkey 10 man enc 11 man rsa При этом если по аналогии попытаться использовать в командной строке openssl-req или req, то такие команды будет не найдены (нужно использовать openssl req …). Команды openssl могут быть громоздкими за счёт того, что через одну из опций команды передаются опции сертификата. На самом деле, для типичных задач используется всего несколько команд и несколько опций. Поэтому если понимать суть, то всё довольно просто. Перечень команд OpenSSL, которые мы будем использовать: genpkey (заменяет genrsa, gendh и gendsa) — генерирует приватные ключи req — утилита для создания запросов на подпись сертификата и для создания самоподписанных сертификатов PKCS#10 x509 — утилита для подписи сертификатов и для показа свойств сертификатов rsa — утилита для работы с ключами RSA, например, для конвертации ключей в различные форматы enc — различные действий с симметричными шифрами pkcs12 — создаёт и парсит файлы PKCS#12 crl2pkcs7 — программа для конвертирования CRL в PKCS#7 pkcs7 — выполняет операции с файлами PKCS#7 в DER или PEM формате verify — программа для проверки цепей сертификатов s_client — команда реализует клиент SSL/TLS, который подключается к удалённому хосту с использованием SSL/TLS. Это очень полезный инструмент диагностики для серверов SSL ca — является минимальным CA-приложением. Она может использоваться для подписи запросов на сертификаты в различных формах и генерировать списки отзыва сертификатов. Она также поддерживает текстовую базу данных выданных сертификатов и их статус rand — эта команда генерирует указанное число случайных байтов, используя криптографически безопасный генератор псевдослучайных чисел (CSPRNG) rsautl — команда может быть использована для подписи, проверки, шифрования и дешифрования данных с использованием алгоритма RSA smime — команда обрабатывает S/MIME почту. Она может шифровать, расшифровывать, подписывать и проверять сообщения S/MIME Чтобы увидеть полный список команд выполните: 1 openssl list -commands Пример вывода: 1 asn1parse ca ciphers cms 2 crl crl2pkcs7 dgst dhparam 3 dsa dsaparam ec ecparam 4 enc engine errstr gendsa 5 genpkey genrsa help list 6 nseq ocsp passwd pkcs12 7 pkcs7 pkcs8 pkey pkeyparam 8 pkeyutl prime rand rehash 9 req rsa rsautl s_client 10 s_server s_time sess_id smime 11 speed spkac srp storeutl 12 ts verify version x509 Как создать сертификаты SSL (TLS) для сайтов Создайте корневой приватный ключ Внимание: этот ключ используется для подписи запросов сертификатов, любой, кто получил этот ключ, может подписывать сертификаты от вашего имени, поэтому храните его в безопасном месте: Генерация приватного ключа RSA используя параметры по умолчанию (ключ будет сохранён в файл с именем rootCA.key): 1 openssl genpkey -algorithm RSA -out rootCA.key https://hackware.ru/?p=12982 5/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru Опция -out указывает на имя файла для сохранения, без этой опции файл будет выведен в стандартный вывод (на экран). Имя выходного файла не должно совпадать с именем входного файла. Для безопасности ключа его следует защитить паролем. Генерация приватного ключа RSA используя 128-битное AES шифрование (-aes-128-cbc) и парольную фразу "hello" (-pass pass:hello): 1 openssl genpkey -algorithm RSA -out rootCA.key -aes-128-cbc -pass pass:hello Конечно, опцию -pass pass:hello можно не указывать, тогда вам будет предложено ввести пароль во время генерации ключа. Список поддерживаемых симметричных алгоритмов шифрования приватного ключа можно узнать в документации (раздел SUPPORTED CIPHERS): 1 man enc Если для генерируемого ключа не указано количество бит, то по умолчанию используется 2048, вы можете указать другое количество бит с помощью команды вида (будет создан 4096-битный ключ): 1 openssl genpkey -algorithm RSA -out rootCA.key -aes-128-cbc -pkeyopt rsa_keygen_bit Создание самоподписанного корневого сертификата 1 openssl req -x509 -new -noenc -key rootCA.key -sha256 -days 1024 -out rootCA.crt Здесь мы использовали наш корневой ключ для создания корневого сертификата (файл rootCA.crt), который должен распространяться на всех компьютерах, которые нам доверяют. А приватный ключ (файл rootCA.key) должен быть секретным, поскольку он будет использоваться для подписи сертификатов серверов. Создание сертификатов (делается для каждого домена) включает в себя несколько этапов. Эту процедуру необходимо выполнить для каждого домена/сервера, которым требуется доверенный сертификат от нашего ЦС. Чтобы создать приватный ключ сертификата 1 openssl genpkey -algorithm RSA -out mydomain.com.key Обратите внимание, что это та же самая команда, которой мы создавали пару приватный- публичный ключ Центра Сертификации (изменено только имя файла с ключами). Создание файла с запросом на подпись сертификата (csr) Получив закрытый ключ, вы можете приступить к созданию запроса на подпись сертификата — Certificate Signing Request (CSR). Это официальный запрос к CA о подписании сертификата, который содержит открытый ключ объекта, запрашивающего сертификат, и некоторую информацию об объекте. Все эти данные будут частью сертификата. CSR всегда подписывается закрытым ключом, соответствующим открытому ключу, который он несёт. Создание CSR обычно представляет собой интерактивный процесс, в ходе которого вы будете предоставлять элементы отличительного имени сертификата (вводить информацию о стране, городе, организации, email и т.д.). Внимательно прочитайте инструкции, предоставленные инструментом openssl; если вы хотите, чтобы поле было пустым, вы должны ввести одну точку (.) в строке, а не просто нажать «Enter». Если вы сделаете последнее, OpenSSL заполнит соответствующее поле CSR значением по умолчанию. (Такое поведение не имеет никакого смысла при использовании с конфигурацией OpenSSL по умолчанию, что и делают практически https://hackware.ru/?p=12982 6/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru все. Это имеет смысл, когда вы осознаете, что можете изменить значения по умолчанию, либо изменив конфигурацию OpenSSL, либо предоставив свои собственные конфигурации в файлах). В запросе на подпись сертификата вы указываете информацию для сертификата, который хотите сгенерировать. Этот запрос будет обработан владельцем корневого ключа (в данном случае вы его создали ранее) для генерации сертификата. Важно: имейте в виду, что при создании запроса на подпись важно указать Common Name, предоставляющее IP-адрес или доменное имя для службы, в противном случае сертификат не может быть проверен. Я опишу здесь два способа: Метод А (интерактивный) Если вы создадите CSR таким способом, openssl задаст вам вопросы о сертификате, который необходимо сгенерировать, например, сведения об организации и Common Name (CN), которое является веб-адресом, для которого вы создаёте сертификат, например, mydomain.com. 1 openssl req -new -key mydomain.com.key -out mydomain.com.csr Метод Б (в одну команду без запросов) Этот метод генерирует тот же результат, что и метод A, но он подходит для использования в вашей автоматизации. 1 openssl req -new -sha256 -key mydomain.com.key -subj "/C=US/ST=CA/O=MyOrg, Inc./CN= Если вам нужно передать дополнительную конфигурацию, вы можете использовать параметр - config, например, здесь я хочу добавить альтернативные имена в мой сертификат. 1 openssl req -new -sha256 -key mydomain.com.key -subj "/C=US/ST=CA/O=MyOrg, Inc./CN= Проверьте содержание CSR После создания CSR используйте его, чтобы подписать собственный сертификат и/или отправить его в общедоступный центр сертификации и попросить его подписать сертификат. Оба подхода описаны в следующих разделах. Но прежде чем сделать это, неплохо бы ещё раз проверить правильность CSR. Это делается так: 1 openssl req -in mydomain.com.csr -noout -text Создание сертификата Создайте сертификат, используя csr для mydomain.com, корневые ключ и сертификат CA. Если вы устанавливаете сервер TLS для своего собственного использования, вы, вероятно, не хотите идти в ЦС для покупки публично доверенного сертификата. Намного проще использовать сертификат, подписанный вашим собственным CA. Если вы являетесь пользователем Firefox, при первом посещении веб-сайта вы можете создать исключение для сертификата, после которого сайт будет защищён так, как если бы он был защищён общедоступным сертификатом. Если у вас уже есть CSR, создайте сертификат, используя следующую команду: 1 openssl x509 -req -in mydomain.com.csr -CA rootCA.crt -CAkey rootCA.key -CAcreatese В результате выполнения этих команд были созданы следующие файлы: rootCA.key — приватный ключ Центра Сертификации, должен храниться в секрете в CA rootCA.crt — публичный корневой сертификат Центра Сертификации — должен быть установлен на всех пользовательских устройствах mydomain.com.key — приватный ключ веб-сайта, должен храниться в секрете на сервере. Указывает в конфигурации виртуального хоста при настройке веб-сервера mydomain.com.csr — запрос на подпись сертификата, после создания сертификата этот файл не нужен, его можно удалить mydomain.com.crt — сертификат сайта. Указывает в конфигурации виртуального хоста при настройке веб-сервера, не является секретным. Веб-браузеры используют имя хоста из Subject Alternative Name (subjectAltName) https://hackware.ru/?p=12982 7/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru В настоящее время популярные веб-браузеры (в том числе Google Chrome, Chromium и Firefox) при подключении по зашифрованному протоколу HTTPS имя хоста, для которого действителен сертификат, получают не из поля Common Name (CN), а из поля Subject Alternative Name (subjectAltName). Альтернативное имя субъекта (Subject Alternative Name, subjectAltName) — это расширение с множеством значений, которое поддерживает несколько типов идентификаторов имени. На практике это означает что при подписании сертификата необходимо указать конфигурационный файл с настройками subjectAltName. Но зато это небольшое неудобство открывает множество горизонтов: в сертификате с Subject Alternative Name можно кроме одного имени хоста указать несколько имён, в том числе с подстановочными знаками. Но и это ещё не всё. Теперь можно создать самоподписанные сертификаты даже для IP адресов! Причём как для IP, так и для IPv6. Как бы там ни было, без Subject Alternative Name у вас не получится создать самоподписанный сертификат, поскольку независимо от Common Name веб-браузеры Google Chrome, Chromium и Firefox будут считать этот сертификат неподходящим для данного домена и вместо страниц веб-сайта будут показывать ошибки: net::ERR_CERT_COMMON_NAME_INVALID Error code: SSL_ERROR_BAD_CERT_DOMAIN Как создать самоподписанный сертификат с Subject Alternative Name (subjectAltName) Первые стадии создания сертификата с Subject Alternative Name (subjectAltName) идентичны созданию обычного сертификата. Если вы этого ещё не сделали, создайте пару ключей для Центра Сертификации (CA): 1 openssl genpkey -algorithm RSA -out rootCA.key 2 openssl req -x509 -new -noenc -key rootCA.key -sha256 -days 1024 -out rootCA.crt Теперь создаём приватный ключ сертификата сайта — вновь стандартные команды: 1 openssl genpkey -algorithm RSA -out DOMAIN.NAME.key Создаём файл запроса на подпись — опять стандартная команда без каких-либо изменений: 1 openssl req -new -key DOMAIN.NAME.key -out DOMAIN.NAME.csr Не забудьте правильно указать Common Name. Перед созданием самоподписанного сертификата, нужно создать файл с настройками Subject Alternative Name (subjectAltName). Я в качестве имени файла выбрал extraoptions.ext, но вы можете выбрать любое другое. Пример синтаксиса файла (для домена hackware.local): 1 subjectAltName = DNS:hackware.local После DNS нужно указать имя хоста. Вы также можете указать имя хоста с подстановочными знаками. Если значений несколько, то они разделяются запятыми: 1 subjectAltName = DNS:*.hackware.local, DNS:hackware.local Затем, на этапе подписания сертификата вам нужно указать опцию -extfile и затем имя файла, куда вы сохранили настройки: 1 openssl x509 -req -in DOMAIN.NAME.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateser https://hackware.ru/?p=12982 8/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru Вот и всё! На самом деле, это было довольно просто. Просто помните, что имя хоста нужно указывать в поле «DNS». Синтаксис Subject Alternative Name (subjectAltName). Как создать валидные сертификаты для IP и IPv6 Если вы хотите, чтобы данный сертификат являлся действительным и для IP адресов, то укажите их тоже: 1 subjectAltName = DNS:*.hackware.local, DNS:hackware.local, IP:127.0.0.1 Как уже было сказано выше, вы можете указать даже IPv6 адреса: 1 subjectAltName = DNS:*.hackware.local, DNS:hackware.local, IP:127.0.0.1, IP:2001:fb Также можно добавить e-mail: 1 subjectAltName = DNS:*.hackware.local, DNS:hackware.local, IP:127.0.0.1, IP:2001:fb Вам необязательно использовать весь этот (не полный) список значений — достаточно указать имя хоста (поле DNS) чтобы ваш сертификат стал признаваться валидным в веб-браузерах. Как посмотреть Subject Alternative Name (subjectAltName) в сертификате Чтобы убедиться, что Subject Alternative Name действительно добавлен в сертификат, используйте следующую команду: 1 openssl x509 -in DOMAIN.NAME.crt -text -noout Обратите внимание на раздел «X509v3 extensions» и вложенный в него подраздел «X509v3 Subject Alternative Name». https://hackware.ru/?p=12982 9/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru Проверка Subject Alternative Name (subjectAltName) Примечание: сертификат локального Центра Сертификации (CA) уже добавлен в доверенные, поэтому браузеры доверяют всем сертификатам, которые были подписанным локальным CA. Подключение по протоколу HTTPS используя доменное имя: https://hackware.local/ Подключение по протоколу HTTPS используя поддомен: https://forum.hackware.local/ https://hackware.ru/?p=12982 10/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru Подключение по протоколу HTTPS используя IP адрес: https://127.0.0.1/ Подключение по протоколу HTTPS используя IPv6 адрес: https://[2001:fb1:13b:50dc:ab9e:6638:dab5:7c90] Смотрите также: Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 1) Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 2) В каждом случае получен статус «Connection is secure»! https://hackware.ru/?p=12982 11/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru Официальная документация по Subject Alternative Name (subjectAltName) Далее дан перевод документации по Subject Alternative Name: 1 man x509v3_config Раздел «Subject Alternative Name». Subject Alternative Name — это расширение с несколькими значениями, которое поддерживает несколько типов идентификаторов имён, включая email (адрес электронной почты), URI (унифицированный индикатор ресурса), DNS (доменное имя DNS), RID (зарегистрированный идентификатор: OBJECT IDENTIFIER), IP (IP-адрес), dirName (отличительное имя) и otherName. Синтаксис каждого из них описан ниже. Параметр email имеет два специальных значения. «copy» автоматически включит все адреса электронной почты, содержащиеся в имени субъекта сертификата в расширение. «move» автоматически переместит все адреса электронной почты из имени субъекта сертификата в расширение. IP-адрес, используемый в параметре IP, может быть в формате IPv4 или IPv6. Значение dirName указывает раздел конфигурации, содержащий отличительное имя для использования, как набор пар имя-значение. Многозначные AVA могут быть сформированы путём добавления к имени символа +. Значение otherName может включать произвольные данные, связанные с OID; значение должно быть OID, за которым следует точка с запятой, а содержимое должно быть указано с использованием синтаксиса в ASN1_generate_nconf(3). Примеры: 1 subjectAltName = email:copy, email:[email protected], URI:http://my.example.com/ 1 subjectAltName = IP:192.168.7.1 1 subjectAltName = IP:13::17 1 subjectAltName = email:[email protected], RID:1.2.3.4 1 subjectAltName = otherName:1.2.3.4;UTF8:some other identifier 1 [extensions] 2 subjectAltName = dirName:dir_sect 3 4 [dir_sect] 5 C = UK 6 O = My Organization 7 OU = My Unit 8 CN = My Name Адрес электронной почты не в кодировке ASCII, соответствующий синтаксису, определённому в разделе 3.3 RFC 6531, предоставляется как otherName.SmtpUTF8Mailbox. Согласно RFC 8398, адрес электронной почты должен быть предоставлен как UTF8String. Для обеспечения допустимого представления в сертификате SmtpUTF8Mailbox должен быть предоставлен следующим образом 1 subjectAltName=@alts 2 [alts] 3 otherName = 1.3.6.1.5.5.7.8.9;FORMAT:UTF8,UTF8String:nonasciiname.example.com Рецепты и советы по генерации SSL сертификатов Выше подробно описан базовый процесс генерации сертификата. Далее рассмотрено несколько приёмов и методов по ускорению создания сертификатов, а также показано, как создать сертификаты с дополнительными возможностями (например, поддержку субдоменов). Создание запроса на подпись (CSR) из существующих сертификатов Вы можете сэкономить время при наборе текста, если вы продлеваете сертификат и не хотите вносить какие-либо изменения в информацию, представленную в нем. С помощью следующей команды вы можете создать совершенно новый CSR из существующего сертификата: 1 openssl x509 -x509toreq -in mydomain.com.crt -out mydomain.com.csr -signkey mydomai Примечание: если вы не используете какую-либо форму закрепления открытого ключа (key pinning — об этом позже) и у вас нет необходимости продолжать использовать существующий https://hackware.ru/?p=12982 12/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru приватный ключ, рекомендуется генерировать новый приватный ключ каждый раз, когда вы подаёте заявку на новый сертификат. Генерация ключей является быстрой и недорогой, но снижает ваши риски. Автоматическая генерация CSR Генерация CSR не обязательно должна быть интерактивной. Используя пользовательский файл конфигурации OpenSSL, вы можете как автоматизировать процесс, так и делать некоторые вещи, которые невозможны в интерактивном режиме. Например, допустим, мы хотим автоматизировать создание CSR для hackware.ru Начнём с создания файла hackware.cnf со следующим содержимым: 1 [req] 2 prompt = no 3 distinguished_name = dn 4 req_extensions = ext 5 input_password = ЗДЕСЬ_ПАРОЛЬ 6 7 [dn] 8 CN = hackware.ru 9 emailAddress = [email protected] 10 O = Any Corp Ltd 11 L = London 12 C = GB 13 14 [ext] 15 subjectAltName = DNS:www.hackware.ru,DNS:hackware.ru Теперь вы можете создать CSR прямо из командной строки без интерактивного режима: 1 openssl req -new -config hackware.cnf -key hackware.key -out hackware.csr Создание сертификатов, действительных для нескольких имён хостов По умолчанию сертификаты, созданные OpenSSL, имеют только одно Common Name и действительны только для одного имени хоста. Из-за этого, даже если у вас есть связанные веб- сайты (домены), вы вынуждены использовать отдельный сертификат для каждого сайта. В этой ситуации использование одного многодоменного сертификата имеет гораздо больше смысла. Кроме того, даже если вы используете один веб-сайт, вы должны убедиться, что сертификат действителен для всех возможных путей, по которым конечные пользователи могут его использовать. На практике это означает использование как минимум двух имён, одно с префиксом www, а другое без (например, www.hackware.ru и hackware.ru). Существует два механизма поддержки нескольких имён хостов в сертификате. Первый — перечислить все желаемые имена хостов, используя расширение X.509, которое называется Subject Alternative Name (SAN). Второе — использовать подстановочные знаки. Вы также можете использовать комбинацию двух подходов, обычно это более удобно. На практике для большинства сайтов вы можете указать доменное имя и подстановочный знак для всех поддоменов (например, hackware.ru и *.hackware.ru). Предупреждение: когда сертификат содержит Alternative Name, все Common Name игнорируются. Более новые сертификаты, произведённые центрами сертификации, могут даже не содержать Common Name. По этой причине включите все желаемые имена хостов в список альтернативных имён (Alternative Name). Сначала поместите информацию о расширении в отдельный текстовый файл. Я собираюсь назвать это hackware.ext. В файле укажите имя расширения (subjectAltName) и перечислите нужные имена хостов, как в следующем примере: 1 subjectAltName = DNS:*.hackware.ru, DNS:hackware.ru Затем, при использовании команды x509 для выдачи сертификата, обратитесь к файлу с помощью ключа -extfile: 1 openssl x509 -req -days 365 -in hackware.csr -signkey hackware.key -out hackware.cr В остальном процесс ничем не отличается от предыдущего. Но когда впоследствии вы изучите сгенерированный сертификат, вы обнаружите, что он содержит расширение SAN (Subject Alternative Name): 1 X509v3 extensions: 2 X509v3 Subject Alternative Name: 3 DNS:*.hackware.ru, DNS:hackware.ru https://hackware.ru/?p=12982 13/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru Самоподписанный сертификат Если вы устанавливаете сервер TLS для своего собственного использования, вы, вероятно, не хотите идти в ЦС для получения публично доверенного сертификата. Намного проще использовать самоподписанный (самозаверяющий) сертификат. В веб браузере вы можете создать исключение для сертификата, после которого сайт будет защищён так, как если бы он был защищён валидным сертификатом. Если у вас уже есть CSR, создайте сертификат, используя следующую команду: 1 openssl x509 -req -days 365 -in localhost_hackware.csr -signkey localhost_hackware. На самом деле вам не нужно специально создавать CSR. Следующая команда создаёт самоподписанный сертификат непосредственно из ключа: 1 openssl req -new -x509 -days 365 -key localhost_hackware.key -out localhost_hackwar Если вы не хотите, чтобы вам задавали какие-либо вопросы, используйте ключ -subj, чтобы предоставить информацию о субъекте сертификата в командной строке: 1 openssl req -new -x509 -days 365 -key hackware.local.key -out hackware.local.crt -s Как получить бесплатный валидный сертификат для сайта Смотрите «Бесплатное получение и настройка автоматического продления действительных сертификатов SSL». Просмотр содержимого ключей и сертификатов Мы можем подробно изучить содержимое всех созданных файлов, а также при необходимости конвертировать их в другие форматы. Наши тестовые файлы: rootCA.key rootCA.crt mydomain.com.key mydomain.com.csr mydomain.com.crt Обратите внимание на расширения файлов — они могут отличаться от тех, которые используются в других инструкциях. Например, вместо.key и.crt может использоваться расширение.pem. Расширение файла не имеет особого значения кроме как служить подсказкой пользователю, что именно находится в этом файле. Это же самое касается и имён файлов — вы можете выбирать любые имена. Все эти файлы являются текстовыми: 1 cat rootCA.key Там мы увидим примерно следующее: 1 -----BEGIN PRIVATE KEY----- 2 MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDJBKkr6XzzAcXD 3 eyDQdvB0SWE2Fl3nqlX/c2RgqMgScXtgidEzOu9ms3Krju5UKLokkQJrZFPMtiIL 4 MuPJFdYjVyfkfnqlZiouBVgJ60s8NQBBI8KnyyAoJCIFdASoW4Kv5C5LT8pX9eRa 5 /huJaRJL5XsFUGnTOLvW2ZLN52iAux9CoZlmH6ZF4nuQpblwN0MHULAhze52VNFT 6 ………………………………………………….. 7 ………………………………………………….. 8 ………………………………………………….. 9 ………………………………………………….. 10 ………………………………………………….. 11 ………………………………………………….. 12 -----END PRIVATE KEY----- https://hackware.ru/?p=12982 14/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru Если вам эти строки кажутся знакомыми на кодировку Base64, то вы совершенно правы — это она и есть. (Смотрите также «Как быстро узнать и преобразовать кодировку»). Этот формат, называемый форматом PEM, расшифровывается как Privacy Enhanced Mail. PEM — это текстовое представление реального двоичного ключа или сертификата в формате DER. Представляет собой двоичного формата DER в кодировке base64 и с дополнительными строками «-----BEGIN PRIVATE KEY-----», «-----BEGIN CERTIFICATE-----» и другими в начале файла и строками «-----END PRIVATE KEY-----», «-----END CERTIFICATE-----» в конце файла. Мы можем хранить двоичную версию файла только с кодировкой DER, но наиболее распространенным способом является версия PEM. Вы можете увидеть структуру приватного следующей командой: 1 openssl rsa -text -in rootCA.key Опция -in ИМЯ_ФАЙЛА указывает имя файла ввода для чтения ключа или стандартный ввод, если эта опция не указана. Если ключ зашифрован, будет запрошен пароль. Опция -text печатает различные компоненты открытого или закрытого ключа в виде простого текста в дополнение к закодированной версии. Пример вывода: 1 RSA Private-Key: (4096 bit, 2 primes) 2 modulus: 3 00:c9:04:a9:2b:e9:7c:f3:01:c5:c3:7b:20:d0:76: 4 [...] 5 publicExponent: 65537 (0x10001) 6 privateExponent: 7 1f:86:71:99:87:66:a7:1d:b2:0c:34:35:33:3c:53: 8 [...] 9 prime1: 10 00:f0:af:82:a6:f1:40:85:ee:c0:77:cc:41:ce:11: 11 [...] 12 prime2: 13 00:d5:cf:03:c6:2a:01:79:9a:e3:1d:ec:1b:52:40: 14 [...] 15 exponent1: 16 00:d7:7e:ed:65:f7:9f:a3:cb:2e:bc:94:3f:5e:f8: 17 [...] 18 exponent2: 19 00:ae:a1:5e:db:c4:03:60:67:79:89:3f:07:31:ae: 20 [...] 21 coefficient: 22 00:e4:7d:de:4e:00:a0:8d:c4:5a:14:93:b6:7f:c9: 23 [...] 24 writing RSA key 25 -----BEGIN RSA PRIVATE KEY----- 26 [...] 27 -----END RSA PRIVATE KEY----- Любой формат ключа на самом деле является контейнером для набора длинных чисел. Все остальные данные можно считать «шумом». https://hackware.ru/?p=12982 15/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru Закрытый ключ содержит: модуль (modulus), частный показатель (privateExponent), открытый показатель (publicExponent), простое число 1 (prime1), простое число 2 (prime2), показатель степени 1 (exponent1), показатель степени 2 (exponent2) и коэффициент (coefficient). Открытый ключ содержит только модуль (modulus) и открытый показатель (publicExponent). Вы можете извлечь из файла ключей публичный ключ: 1 openssl rsa -in rootCA.key -pubout -out rootCA-public.key По умолчанию выводится закрытый ключ: с опцией -pubout вместо него будет выведен открытый ключ. Эта опция устанавливается автоматически, если ввод является открытым ключом. Следующая команда покажет информацию о публичном ключе: 1 openssl rsa -text -in rootCA-public.key -pubin По умолчанию из входного файла считывается закрытый ключ. Используемая в предыдущей команде опция -pubin делает так, что вместо приватного ключа читается открытый ключ. Можно также добавить опцию -noout — с ней будет выведена та же самая информация, но не будет показана кодированная версия ключа. 1 openssl rsa -text -in rootCA-public.key -pubin -noout С такими же опциями, но уже используя команду req, можно изучить содержимое запроса на подпись сертификата: 1 openssl req -in mydomain.com.csr -noout -text https://hackware.ru/?p=12982 16/79 06.01.2025, 17:45 OpenSSL: принципы работы, создание сертификатов, аудит - HackWare.ru При создании SSL сертификата мы создали две пары ключей (корневые и для домена), то есть это файлы rootCA.key и mydomain.com.key, но по своей технической сути они идентичны. Что касается сертификатов, которых у нас тоже два (rootCA.crt и mydomain.com.crt), то по своей природе они не являются одинаковыми: корневой сертификат является самоподписанным, а сертификат домена подписан приватным корневым ключом. Информацию о содержимом сертификатов можно посмотреть командой x509 (остальные опции нам уже знакомы): 1 openssl x509 -in rootCA.crt -noout -text 2 openssl x509 -in mydomain.com.crt -text -noout Самоподписанные сертификаты обычно содержат только самые основные данные сертификатов, как показано в предыдущем примере. Для сравнения, сертификаты, выданные общедоступными центрами сертификации, гораздо интереснее, поскольку они содержат ряд дополнительных полей (с помощью механизма расширений X.509). Сертификат (цепочку сертификатов) любого сайта вы можете получить следующей командой (замените w-e-b.site на интересующий вас сайт): 1 openssl s_client -showcerts -connect w-e-b.site:443

Use Quizgecko on...
Browser
Browser