Файл pem чем открыть

Table of Contents:

Файл с расширением файла PEM является файлом сертификата конфиденциальности, который используется для частной передачи электронной почты. Лицо, получающее это электронное письмо, может быть уверенным, что сообщение не было изменено во время его передачи, не было показано никому другому и было отправлено лицом, которое утверждает, что оно отправило его.

Формат PEM возник из-за сложности отправки двоичных данных по электронной почте. Формат PEM кодирует двоичный код с базой64, чтобы он существовал как строка ASCII.

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

Некоторые файлы в формате PEM могут вместо этого использовать другое расширение файла, например CER или CRT для сертификатов, или KEY для открытых или закрытых ключей.

Как открыть файлы PEM

Шаги для открытия файла PEM различаются в зависимости от приложения, которое оно нуждается, и операционной системы, которую вы используете. Однако вам может потребоваться преобразовать ваш файл PEM в CER или CRT, чтобы некоторые из этих программ могли принять файл.

Windows

Если вам нужен файл CER или CRT в почтовом клиенте Microsoft, например Outlook, откройте его в Internet Explorer, чтобы он автоматически загрузился в соответствующую базу данных. Клиент электронной почты может автоматически использовать его оттуда.

Чтобы узнать, какие файлы сертификатов загружены на ваш компьютер и импортировать их вручную, используйте Internet Explorer. инструменты меню для доступа Свойства обозревателя> Контент> Сертификаты, как это:

Файл pem чем открыть

Чтобы импортировать файл CER или CRT в Windows, начните с открытия Microsoft Management Console в диалоговом окне «Выполнить» (используйте Windows Key + R сочетание клавиш для ввода ММС). Оттуда перейдите к Файл> Добавить / удалить оснастку … и выберите Сертификаты из левого столбца, а затем Добавить> в центре окна.

Файл pem чем открыть

выберите Компьютерный счет на следующем экране, а затем перейдите к мастеру, выбрав Локальный компьютер когда его спрашивают. Как только «Сертификаты» загружаются под «Корень консоли», разверните папку и щелкните правой кнопкой мыши доверенные корневые центры сертификации, и выберите Все задачи> Импорт ….

Macos

Та же концепция верна для вашего почтового клиента Mac, как и для Windows: используйте Safari для импорта файла PEM в Keychain Access.

Вы также можете импортировать сертификаты SSL через Файл> Импортировать элементы … в меню «Доступ к ключам». выберите система в раскрывающемся меню, а затем следуйте инструкциям на экране.

Файл pem чем открыть

Если эти методы не работают для импорта файла PEM в macOS, вы можете попробовать следующую команду (измените «yourfile.pem» на имя и расположение вашего конкретного файла PEM):

/ Библиотека / Брелки / login.keychain

Linux

Используйте эту команду keytool для просмотра содержимого файла PEM в Linux:

Выполните следующие шаги, если вы хотите импортировать файл CRT в репозиторий доверенных сертификатов Linux (см. Метод преобразования PEM в CRT в следующем разделе ниже, если вместо этого есть файл PEM):

Создайте там папку (например, sudo mkdir / usr / share / ca-certificate / work).

Убедитесь, что разрешения установлены правильно (755 для папки и 644 для файла).

Запустите sudo update-ca-certificate команда.

Firefox и Thunderbird

Если файл PEM необходимо импортировать в почтовый клиент Mozilla, например Thunderbird, вам может потребоваться сначала экспортировать файл PEM из Firefox. Откройте меню Firefox и выберите Опции, Идти к Конфиденциальность и безопасность и найти Безопасность раздел, а затем используйте Просмотреть сертификаты … чтобы открыть список, откуда вы можете выбрать тот, который вам нужно экспортировать. Использовать Резервное копирование… возможность сохранить его.

Затем, в Thunderbird, откройте меню и нажмите или коснитесь Опции, Перейдите к Дополнительно> Сертификаты> Управление сертификатами> Ваши сертификаты> Импорт …, Из раздела «Имя файла:» Импортировать окно, выберите Файлы сертификатов из раскрывающегося списка, а затем найдите и откройте файл PEM.

Чтобы импортировать файл PEM в Firefox, просто выполните те же действия, что и для экспорта, но выберите Импортировать… вместо Резервное копирование… кнопка. Если вы не можете найти файл PEM, убедитесь, что в поле «Имя файла» диалогового окна установлено значение Файлы сертификатов и не Файлы PKCS12.

Java KeyStore

См. Этот поток переполнения стека при импорте файла PEM в Java KeyStore (JKS), если вам нужно это сделать. Другим вариантом, который может работать, является использование этого инструмента keyutil.

Как конвертировать файл PEM

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

Преобразуйте PEM в PPK с помощью PuTTYGen. выберите нагрузка с правой стороны программы, установите тип файла как любой файл (*. *), а затем просмотрите и откройте файл PEM. выберите Сохранить закрытый ключ для создания файла PPK.

С помощью OpenSSL (получить версию Windows здесь) вы можете преобразовать файл PEM в PFX с помощью следующей команды:

Если у вас есть файл PEM, который требуется преобразовать в CRT, как в случае с Ubuntu, используйте эту команду в OpenSSL:

См. Ссылку «Переполнение стека» выше о использовании файла PEM с Java KeyStore, если вы хотите преобразовать файл в JKS или этот учебник из Oracle, чтобы импортировать файл в доверенное хранилище Java.

Дополнительная информация о PEM

Функция целостности данных в формате расширенного почтового сертификата использует сообщения RSA-MD2 и RSA-MD5 для сравнения сообщения до и после его отправки, чтобы гарантировать, что он не был изменен на этом пути.

Один файл PEM может содержать несколько сертификатов, и в этом случае секции «END» и «BEGIN» соседствуют друг с другом.

Ваш файл все еще не открывается?

Одна из причин, по которой ваш файл не открывается ни одним из способов, описанных выше, заключается в том, что вы на самом деле не имеете дело с файлом PEM. Вместо этого у вас может быть файл, который просто использует расширение с аналогичным написанием. Если это так, нет необходимости связывать эти два файла или работать с одними и теми же программами.

Например, PEF выглядит очень много, как PEM, но вместо этого принадлежит либо файлу формата Pentax Raw Image, либо Portable Format Embosser Format. Следуйте этой ссылке, чтобы узнать, как открывать или конвертировать файлы PEF, если это действительно так.

То же самое можно сказать и для многих других расширений файлов, таких как EMP, EPP, PES, PET … у вас есть идея. Просто дважды проверьте расширение файла, чтобы увидеть, что он действительно читает «.pem», прежде чем считать, что вышеприведенные методы не работают.

Если вы уверены, что у вас есть файл PEM, но у вас возникли проблемы с его открытием или использованием, см. Раздел «Дополнительная помощь» для получения информации о контакте со мной в социальных сетях или по электронной почте, публикации на форумах технической поддержки и т. Д. Позвольте мне знать, какие у вас проблемы, и я посмотрю, что я могу сделать, чтобы помочь.

Файл NEF (что это такое и как его открыть)

Файл pem чем открыть

Файл AZW ​​(что это такое и как его открыть)

Файл pem чем открыть

Файл ODS (что это такое и как его открыть)

Файл pem чем открыть

Файл ODS, скорее всего, является файлом OpenDocument Spreadsheet. Вот как открыть файл ODS или преобразовать файл ODS в XLS, PDF, XLSX, CSV, DOC и т. Д.

Источник

Как открыть PEM файлы на вашем устройстве

PEM расширение файла

Что такое PEM файл?

Как открыть файл PEM?

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

Шаг 1. Установите программу, которая поддерживает PEM файлы

Чтобы открыть PEM файл, в системе должна быть установлена соответствующая программа, которая поддерживает этот формат файлов. Ниже представлен список программ, которые поддерживают файлы с расширением PEM.

Программы, открывающие файлы PEM

Скачайте установщик для данного приложения и запустите его. После завершения установки PEM файлы должны быть открыты с установленным приложением по умолчанию при следующей попытке открыть файл этого типа.

Помните!

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

Шаг 2. Свяжите данное программное обеспечение с файлами PEM

Может возникнуть ситуация, когда у пользователя есть соответствующее приложение, поддерживающее файлы PEM, установленные в его системе, но такое приложение не связано с файлами этого типа. Чтобы связать данное приложение с PEM файлами, пользователь должен открыть подменю файлов, щелкнув правой кнопкой мыши значок файла и выбрав опцию «Открыть с помощью». Система отобразит список предлагаемых программ, которые можно использовать для открытия файлов PEM. Выберите соответствующую опцию и установите флажок «Всегда использовать выбранное приложение для открытия файлов такого типа». Система сохранит эту информацию, используя выбранную программу, чтобы открыть PEM файлы.

Шаг 3. Проверьте, нет ли других ошибок, связанных с файлами PEM

Когда вышеупомянутые решения терпят неудачу, другие варианты должны быть продолжены. Возможно, файл PEM поврежден или поврежден. Наиболее распространенные причины повреждения файла:

Источник

Как конвертировать SSL-сертификат в нужный формат

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

Форматы сертификатов

Существует четыре основных формата сертификатов:

PEM — популярный формат используемый Центрами Сертификации для выписки SSL-сертификатов.

Сертификаты PEM подходят для установки на веб-серверы nginx, apache2.

DER — это бинарная форма сертификата PEM.

Сертификаты DER подходят для установки на серверы Java.

В файлах содержатся строки вида

Сертификаты P7B подходят для установки на серверы MS Windows, Java Tomcat

Сертификаты PFX подходят для установки на серверы Windows, в частности Internet Information Services(IIS).

Способы конвертации

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

Конвертация SSl сертификатов посредством OpenSSL

OpenSSL — это надежный, коммерческий и полнофункциональный инструментарий для протоколов Transport Layer Security (TLS) и Secure Sockets Layer (SSL). А также библиотека криптографии общего назначения. Конвертация с использованием библиотеки OpenSSL считается одним из самых безопасных способов: все данные будет сохранены непосредственно на устройстве, на котором будут выполняться операции по конвертированию.

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

Предоставленные ниже примеры команд OpenSSL позволяют конвертировать сертификаты и ключи в нужный формат.

Конвертировать PEM в DER можно посредством команды:

Аналогично, для других типов:

PEM в P7B

PEM в PFX

Обращаем ваше внимание, что после выполнения команды, будет запрошена установка пароля ключа.

DER в PEM

P7B в PEM

P7B в PFX

PFX в PEM

Конвертация при помощи онлайн-сервисов

Для конвертации сертификатов самый удобный способ — использование специальных сайтов, например, https://ssl4less.ru/ssl-tools/convert-certificate.html

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

Чтобы воспользоваться этим способом, вы просто переходите по ссылке на нужный сайт, выбираете нужные вам форматы и прикрепляете файл или файлы сертификата.

Конвертация с PEM в DER

Файл pem чем открыть

Конвертация с PEM в P7B

Файл pem чем открыть

В этом случае существует возможность добавить также цепочку сертификатов.

Что такое цепочка сертификатов и для чего она нужна, можно узнать в статье «Что такое корневой сертификат»

Конвертация с PEM в PFX

Файл pem чем открыть

В этом случае необходимо обратить внимание на то, что обязателен ключ сертификата, а также необходимо установить пароль ключа.

Конвертация из DER в PEM

Файл pem чем открыть

Конвертация из P7B в PEM

Файл pem чем открыть

Конвертация из P7B в PFX

Файл pem чем открыть

Конвертация из PFX в PEM

Файл pem чем открыть

Конвертация скриптом openssl-ToolKit

OpenSSL ToolKit — скрипт, который облегчает работу с библиотекой OpenSSL. Работа со скриптом является безопасным решением, т.к сертификаты и ключи сертификата никуда не передаются, а используются непосредственно на вашем сервере.

Для начала работы скрипт необходимо скачать и запустить. Сделать это можно одной командой:

После выполнения команды откроется следующее окно:

Файл pem чем открыть

Нас интересует пункт 2. Convert certificates

После перехода в пункт 2. появится следующее меню, с выбором нужного типа конвертирования

Файл pem чем открыть

После выбора преобразования, в данном случае PEM to FPX, скрипт предложит выбрать директорию с сертификатами на том устройстве, где запускается скрипт.

Файл pem чем открыть

В нашем случае мы их скачали в директорию /home/ivan/crt/

После корректного ввода директории, скрипт отобразит все файлы в этой директории.

Далее нужно ввести имя сертификата, который будем конвертировать, в нашем случае это site.pem

Файл pem чем открыть

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

Сделать это можно простой командой

Данное действие необходимо только для конвертации из PEM в PFX.

Мы рассмотрели пример конвертации PEM в PFX. Этим же путем можно конвертировать сертификаты в другие форматы. Единственное, что вам уже не понадобится шаг с объединением файлов.

Источник

Как конвертировать SSL-сертификат в нужный формат

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

Форматы сертификатов

Существует четыре основных формата сертификатов:

PEM — популярный формат используемый Центрами Сертификации для выписки SSL-сертификатов.

Сертификаты PEM подходят для установки на веб-серверы nginx, apache2.

DER — это бинарная форма сертификата PEM.

Сертификаты DER подходят для установки на серверы Java.

В файлах содержатся строки вида

Сертификаты P7B подходят для установки на серверы MS Windows, Java Tomcat

Сертификаты PFX подходят для установки на серверы Windows, в частности Internet Information Services(IIS).

Способы конвертации

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

Конвертация SSl сертификатов посредством OpenSSL

OpenSSL — это надежный, коммерческий и полнофункциональный инструментарий для протоколов Transport Layer Security (TLS) и Secure Sockets Layer (SSL). А также библиотека криптографии общего назначения. Конвертация с использованием библиотеки OpenSSL считается одним из самых безопасных способов: все данные будет сохранены непосредственно на устройстве, на котором будут выполняться операции по конвертированию.

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

Предоставленные ниже примеры команд OpenSSL позволяют конвертировать сертификаты и ключи в нужный формат.

Конвертировать PEM в DER можно посредством команды:

Аналогично, для других типов:

PEM в P7B

PEM в PFX

Обращаем ваше внимание, что после выполнения команды, будет запрошена установка пароля ключа.

DER в PEM

P7B в PEM

P7B в PFX

PFX в PEM

Конвертация при помощи онлайн-сервисов

Для конвертации сертификатов самый удобный способ — использование специальных сайтов, например, https://ssl4less.ru/ssl-tools/convert-certificate.html

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

Чтобы воспользоваться этим способом, вы просто переходите по ссылке на нужный сайт, выбираете нужные вам форматы и прикрепляете файл или файлы сертификата.

Конвертация с PEM в DER

Файл pem чем открыть

Конвертация с PEM в P7B

Файл pem чем открыть

В этом случае существует возможность добавить также цепочку сертификатов.

Что такое цепочка сертификатов и для чего она нужна, можно узнать в статье «Что такое корневой сертификат»

Конвертация с PEM в PFX

Файл pem чем открыть

В этом случае необходимо обратить внимание на то, что обязателен ключ сертификата, а также необходимо установить пароль ключа.

Конвертация из DER в PEM

Файл pem чем открыть

Конвертация из P7B в PEM

Файл pem чем открыть

Конвертация из P7B в PFX

Файл pem чем открыть

Конвертация из PFX в PEM

Файл pem чем открыть

Конвертация скриптом openssl-ToolKit

OpenSSL ToolKit — скрипт, который облегчает работу с библиотекой OpenSSL. Работа со скриптом является безопасным решением, т.к сертификаты и ключи сертификата никуда не передаются, а используются непосредственно на вашем сервере.

Для начала работы скрипт необходимо скачать и запустить. Сделать это можно одной командой:

После выполнения команды откроется следующее окно:

Файл pem чем открыть

Нас интересует пункт 2. Convert certificates

После перехода в пункт 2. появится следующее меню, с выбором нужного типа конвертирования

Файл pem чем открыть

После выбора преобразования, в данном случае PEM to FPX, скрипт предложит выбрать директорию с сертификатами на том устройстве, где запускается скрипт.

Файл pem чем открыть

В нашем случае мы их скачали в директорию /home/ivan/crt/

После корректного ввода директории, скрипт отобразит все файлы в этой директории.

Далее нужно ввести имя сертификата, который будем конвертировать, в нашем случае это site.pem

Файл pem чем открыть

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

Сделать это можно простой командой

Данное действие необходимо только для конвертации из PEM в PFX.

Мы рассмотрели пример конвертации PEM в PFX. Этим же путем можно конвертировать сертификаты в другие форматы. Единственное, что вам уже не понадобится шаг с объединением файлов.

Источник

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

OpenSSL: принципы работы, создание сертификатов, аудит

Оглавление

OpenSSL: инструкция по использованию и аудит безопасности

Знаете ли вы, что один единственный корневой сертификат хакера, установленный в вашу систему, фактически лишает её защиты с помощью шифрования SSL (TLS)? Знаете ли вы, что на самом деле для передачи основных данных браузеры не используют ассиметричное шифрование (с помощью сертификатов), а используют симметричное (парольная фраза)? Задумывались ли вы, можете ли Удостоверяющий Центр, выдавший SSL сертификат, расшифровать при желании передаваемый на сайт трафик? Почему VNC сессия, защищённая самодельным сертификатом, считается надёжной, а подключение к сайту, использующего такой же сертификат, нет? Почему для сайтов не подходят самодельные сертификаты? Знаете ли вы, что в вашей системе уже установлены сотни корневых сертификатов различных Центров Сертификации которым безоговорочно доверяют веб браузеры и другие приложения?

В этой статье мы разберёмся, как работает SSL (TLS) шифрование, как пользоваться утилитами OpenSSL, как создавать свои собственные ключи и Центры Сертификации, как подписывать сертификаты для сайтов, как просмотреть детальную информацию о сертификате и ключе, как конвертировать сертификаты в различные форматы и как проверить различные аспекты безопасности SSL (TLS), как проверить, какие сертификаты установлены в качестве доверенных корневых, как добавить новый доверенный сертификат или удалить сертификат из доверенных..

Что такое OpenSSL и для чего используется

OpenSSL — это криптографический инструментарий, реализующий сетевые протоколы Secure Sockets Layer (SSL v2/v3) и Transport Layer Security (TLS v1) и соответствующие им стандарты криптографии.

Программа openssl — это инструмент командной строки для использования различных криптографических функций криптографической библиотеки OpenSSL в консоли. Основны возможности:

Как работают SSL сертификаты

Сгенерированные в OpenSSL ключи могут использоваться для шифрования различных данных, но самое популярное использование — шифрование в HTTPS протоколе, где используется ассиметричное шифрование, это означает, что для шифрования используется один ключ, а для расшифровки — второй ключ. Эти ключи называются:

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

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

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

Любой может сгенерировать пару ключей, поэтому возникает проблема идентификации — как проверить, что публичный ключ выпущен определённым лицом?

Это можно было бы сделать например так: владелец сайт mysite.org генерирует пару публичный-приватный ключ и просит третью сторону подписать его публичный ключ. В результате публичный ключ распространяется с цифровой подписью, которую можно проверить публичным ключом третьей стороны. На самом деле, всё именно так и происходит, а подписанный публичный ключ, вместе с дополнительной информацией (например, название домена, для которого он подписан) упаковываются в сертификат.

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

В результате процедура создания сертификата выглядит так:

В результате получается сертификат со следующими свойствами:

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

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

Как генерировать сертификаты в OpenSSL

На самом деле, приватный ключ веб-сервера и приватный ключ Центр Сертификации (CA) по своей природе ничем не отличаются — они генерируются одной и той же командой. Но Центр Сертификации (CA) имеет особый статус постольку:

Вернёмся к процедуре подписи, а фактически создания сертификата сервера — создаваемый сертификат должен быть криптографически связан с приватным ключом сервера. Но приватный ключ должен быть известен исключительно его владельцу (серверу). Выходом из данной ситуации является использования уже упомянутого Certificate Signing Request (CSR), то есть «запроса на подпись сертификата». То есть Центру Сертификации передаеъётся публичный ключ и название домена, но приватный ключ остаётся в тайне. Именно в этом смысл существования CSR.

В учебных целях вы можете создать свои корневые ключи и даже свой «Центр Сертификации (CA)». Затем создадим пару приватный и публичный ключ сервера. Используя ключ сервера мы создадим запрос на подпись сертификата (CSR). Приватным ключом CA мы подпишем (создадим) сертификат для сервера.

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

Какую команду использовать, genpkey или genrsa

В пакете OpenSSL есть две команды, которые выполняют очень похожее действие — генерируют пару приватный-публичный ключ RSA:

На самом деле, форматы создаваемых этими программами RSA ключей немного различаются. Команда genpkey заменяет команду genpkey, а также ещё две команды: gendh и gendsa.

То есть использовать надо genpkey с которой нужно указать алгоритм ключа опцией -algorithm.

Как пользоваться OpenSSL (команды OpenSSL)

Команды OpenSSL не столько сложные, сколько запутанные.

Во-первых, их много (48 основных команд, 28 digest команд, 84 cipher команды, а также алгоритмы и методы), некоторые из них выполняют более чем одну функцию, некоторые имеют пересекающиеся функции и не всегда непонятно, какую команду выбрать.

Синтаксис использования команд OpenSSL:

Ещё один пример как команды OpenSSL могут сбить с толку: у команды x509 есть опция -req, а у команды req есть опция -x509.

Если вы хотите получить справку по командам OpenSSL, то вам нужно знать, что это делается так:

При этом если по аналогии попытаться использовать в командной строке openssl-req или req, то такие команды будет не найдены (нужно использовать openssl req …).

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

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

Перечень команд OpenSSL, которые мы будем использовать:

Чтобы увидеть полный список команд выполните:

Как создать сертификаты SSL (TLS) для сайтов

Создайте корневой приватный ключ

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

Генерация приватного ключа RSA используя параметры по умолчанию (ключ будет сохранён в файл с именем rootCA.key):

Опция -out указывает на имя файла для сохранения, без этой опции файл будет выведен в стандартный вывод (на экран). Имя выходного файла не должно совпадать с именем входного файла.

Для безопасности ключа его следует защитить паролем. Генерация приватного ключа RSA используя 128-битное AES шифрование (-aes-128-cbc) и парольную фразу «hello» (-pass pass:hello):

Конечно, опцию -pass pass:hello можно не указывать, тогда вам будет предложено ввести пароль во время генерации ключа.

Список поддерживаемых симметричных алгоритмов шифрования приватного ключа можно узнать в документации (раздел SUPPORTED CIPHERS):

Если для генерируемого ключа не указано количество бит, то по умолчанию используется 2048, вы можете указать другое количество бит с помощью команды вида (будет создан 4096-битный ключ):

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

Здесь мы использовали наш корневой ключ для создания корневого сертификата (файл rootCA.crt), который должен распространяться на всех компьютерах, которые нам доверяют. А приватный ключ (файл rootCA.key) должен быть секретным, поскольку он будет использоваться для подписи сертификатов серверов.

Файл pem чем открыть

Создание сертификатов (делается для каждого домена) включает в себя несколько этапов. Эту процедуру необходимо выполнить для каждого домена/сервера, которым требуется доверенный сертификат от нашего ЦС.

Чтобы создать приватный ключ сертификата

Обратите внимание, что это та же самая команда, которой мы создавали пару приватный-публичный ключ Центра Сертификации (изменено только имя файла с ключами).

Создание файла с запросом на подпись сертификата (csr)

Получив закрытый ключ, вы можете приступить к созданию запроса на подпись сертификата — Certificate Signing Request (CSR). Это официальный запрос к CA о подписании сертификата, который содержит открытый ключ объекта, запрашивающего сертификат, и некоторую информацию об объекте. Все эти данные будут частью сертификата. CSR всегда подписывается закрытым ключом, соответствующим открытому ключу, который он несёт.

Создание CSR обычно представляет собой интерактивный процесс, в ходе которого вы будете предоставлять элементы отличительного имени сертификата (вводить информацию о стране, городе, организации, email и т.д.). Внимательно прочитайте инструкции, предоставленные инструментом openssl; если вы хотите, чтобы поле было пустым, вы должны ввести одну точку (.) в строке, а не просто нажать «Enter». Если вы сделаете последнее, OpenSSL заполнит соответствующее поле CSR значением по умолчанию. (Такое поведение не имеет никакого смысла при использовании с конфигурацией OpenSSL по умолчанию, что и делают практически все. Это имеет смысл, когда вы осознаете, что можете изменить значения по умолчанию, либо изменив конфигурацию OpenSSL, либо предоставив свои собственные конфигурации в файлах).

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

Важно: имейте в виду, что при создании запроса на подпись важно указать Common Name, предоставляющее IP-адрес или доменное имя для службы, в противном случае сертификат не может быть проверен.

Я опишу здесь два способа:

Если вы создадите CSR таким способом, openssl задаст вам вопросы о сертификате, который необходимо сгенерировать, например, сведения об организации и Common Name (CN), которое является веб-адресом, для которого вы создаёте сертификат, например, mydomain.com.

Метод Б (в одну команду без запросов)

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

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

Проверьте содержание CSR

После создания CSR используйте его, чтобы подписать собственный сертификат и/или отправить его в общедоступный центр сертификации и попросить его подписать сертификат. Оба подхода описаны в следующих разделах. Но прежде чем сделать это, неплохо бы ещё раз проверить правильность CSR. Это делается так:

Создание сертификата

Создайте сертификат, используя csr для mydomain.com, корневые ключ и сертификат CA.

Если вы устанавливаете сервер TLS для своего собственного использования, вы, вероятно, не хотите идти в ЦС для покупки публично доверенного сертификата. Намного проще использовать сертификат, подписанный вашим собственным CA. Если вы являетесь пользователем Firefox, при первом посещении веб-сайта вы можете создать исключение для сертификата, после которого сайт будет защищён так, как если бы он был защищён общедоступным сертификатом.

Если у вас уже есть CSR, создайте сертификат, используя следующую команду:

В результате выполнения этих команд были созданы следующие файлы:

Рецепты и советы по генерации SSL сертификатов

Выше подробно описан базовый процесс генерации сертификата. Далее рассмотрено несколько приёмов и методов по ускорению создания сертификатов, а также показано, как создать сертификаты с дополнительными возможностями (например, поддержку субдоменов).

Создание запроса на подпись (CSR) из существующих сертификатов

Вы можете сэкономить время при наборе текста, если вы продлеваете сертификат и не хотите вносить какие-либо изменения в информацию, представленную в нем. С помощью следующей команды вы можете создать совершенно новый CSR из существующего сертификата:

Примечание: если вы не используете какую-либо форму закрепления открытого ключа (key pinning — об этом позже) и у вас нет необходимости продолжать использовать существующий приватный ключ, рекомендуется генерировать новый приватный ключ каждый раз, когда вы подаёте заявку на новый сертификат. Генерация ключей является быстрой и недорогой, но снижает ваши риски.

Автоматическая генерация CSR

Генерация CSR не обязательно должна быть интерактивной. Используя пользовательский файл конфигурации OpenSSL, вы можете как автоматизировать процесс, так и делать некоторые вещи, которые невозможны в интерактивном режиме.

Например, допустим, мы хотим автоматизировать создание CSR для hackware.ru Начнём с создания файла hackware.cnf со следующим содержимым:

Теперь вы можете создать 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) и перечислите нужные имена хостов, как в следующем примере:

Затем, при использовании команды x509 для выдачи сертификата, обратитесь к файлу с помощью ключа -extfile:

В остальном процесс ничем не отличается от предыдущего. Но когда впоследствии вы изучите сгенерированный сертификат, вы обнаружите, что он содержит расширение SAN (Subject Alternative Name):

Самоподписанный сертификат

Если вы устанавливаете сервер TLS для своего собственного использования, вы, вероятно, не хотите идти в ЦС для получения публично доверенного сертификата. Намного проще использовать самоподписанный (самозаверяющий) сертификат. В веб браузере вы можете создать исключение для сертификата, после которого сайт будет защищён так, как если бы он был защищён валидным сертификатом.

Если у вас уже есть CSR, создайте сертификат, используя следующую команду:

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

Если вы не хотите, чтобы вам задавали какие-либо вопросы, используйте ключ -subj, чтобы предоставить информацию о субъекте сертификата в командной строке:

Как получить бесплатный валидный сертификат для сайта

Просмотр содержимого ключей и сертификатов

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

Наши тестовые файлы:

Обратите внимание на расширения файлов — они могут отличаться от тех, которые используются в других инструкциях. Например, вместо .key и .crt может использоваться расширение .pem. Расширение файла не имеет особого значения кроме как служить подсказкой пользователю, что именно находится в этом файле. Это же самое касается и имён файлов — вы можете выбирать любые имена.

Все эти файлы являются текстовыми:

Там мы увидим примерно следующее:

Файл pem чем открыть

Если вам эти строки кажутся знакомыми на кодировку Base64, то вы совершенно правы — это она и есть. (Смотрите также «Как быстро узнать и преобразовать кодировку»).

Этот формат, называемый форматом PEM, расшифровывается как Privacy Enhanced Mail.

PEM — это текстовое представление реального двоичного ключа или сертификата в формате DER. Представляет собой двоичного формата DER в кодировке base64 и с дополнительными строками «——BEGIN PRIVATE KEY——», «——BEGIN CERTIFICATE——» и другими в начале файла и строками «——END PRIVATE KEY——», «——END CERTIFICATE——» в конце файла.

Мы можем хранить двоичную версию файла только с кодировкой DER, но наиболее распространенным способом является версия PEM.

Вы можете увидеть структуру приватного следующей командой:

Опция -in ИМЯ_ФАЙЛА указывает имя файла ввода для чтения ключа или стандартный ввод, если эта опция не указана. Если ключ зашифрован, будет запрошен пароль.

Опция -text печатает различные компоненты открытого или закрытого ключа в виде простого текста в дополнение к закодированной версии.

Любой формат ключа на самом деле является контейнером для набора длинных чисел. Все остальные данные можно считать «шумом».

Закрытый ключ содержит: модуль (modulus), частный показатель (privateExponent), открытый показатель (publicExponent), простое число 1 (prime1), простое число 2 (prime2), показатель степени 1 (exponent1), показатель степени 2 (exponent2) и коэффициент (coefficient).

Открытый ключ содержит только модуль (modulus) и открытый показатель (publicExponent).

Вы можете извлечь из файла ключей публичный ключ:

По умолчанию выводится закрытый ключ: с опцией -pubout вместо него будет выведен открытый ключ. Эта опция устанавливается автоматически, если ввод является открытым ключом.

Следующая команда покажет информацию о публичном ключе:

По умолчанию из входного файла считывается закрытый ключ. Используемая в предыдущей команде опция -pubin делает так, что вместо приватного ключа читается открытый ключ.

Можно также добавить опцию -noout — с ней будет выведена та же самая информация, но не будет показана кодированная версия ключа.

С такими же опциями, но уже используя команду req, можно изучить содержимое запроса на подпись сертификата:

Файл pem чем открыть

При создании SSL сертификата мы создали две пары ключей (корневые и для домена), то есть это файлы rootCA.key и mydomain.com.key, но по своей технической сути они идентичны.

Что касается сертификатов, которых у нас тоже два (rootCA.crt и mydomain.com.crt), то по своей природе они не являются одинаковыми: корневой сертификат является самоподписанным, а сертификат домена подписан приватным корневым ключом.

Информацию о содержимом сертификатов можно посмотреть командой x509 (остальные опции нам уже знакомы):

Самоподписанные сертификаты обычно содержат только самые основные данные сертификатов, как показано в предыдущем примере. Для сравнения, сертификаты, выданные общедоступными центрами сертификации, гораздо интереснее, поскольку они содержат ряд дополнительных полей (с помощью механизма расширений X.509).

Сертификат (цепочку сертификатов) любого сайта вы можете получить следующей командой (замените w-e-b.site на интересующий вас сайт):

Файл pem чем открыть

Вы увидите сертификаты (один или несколько), найдите по полю CN тот, который вас интересует, например, сертификат домена w-e-b.site:

И скопируйте содержимое начиная с ——BEGIN CERTIFICATE—— и заканчивая ——END CERTIFICATE——. Затем сохраните это в файл.

Вы также можете сохранить сертификат центра сертификации и изучить его:

Файл pem чем открыть

К примеру, сертификат сайта w-e-b.site я сохранил в файл w-e-b.site.crt, для просмотра информации о нём:

Файл pem чем открыть

Файл pem чем открыть

Issuer указывает на организацию, которая выдала (подписала) сертификат:

Validity — срок действия сертификата:

Subject: CN — домен (IP адрес) для которого предназначен сертификат:

Поддомены в группе X509v3 extensions → X509v3 Subject Alternative Name (подробности чуть позже):

Теперь бегло рассмотрим расширения X.509.

Расширение Basic Constraints используется для маркировки сертификатов как принадлежащих ЦС, давая им возможность подписывать другие сертификаты. В сертификатах, отличных от CA, это расширение будет либо пропущено, либо будет установлено значение CA, равное FALSE. Это расширение является критическим, что означает, что все программные сертификаты должны понимать его значение.

Расширения Key Usage (KU) и Extended Key Usage (EKU) ограничивают возможности использования сертификата. Если эти расширения присутствуют, то разрешены только перечисленные варианты использования. Если расширения отсутствуют, ограничений на использование нет. То, что вы видите в этом примере, типично для сертификата веб-сервера, который, например, не позволяет подписывать код:

Расширение CRL Distribution Points перечисляет адреса, по которым можно найти информацию о списке отзыва сертификатов (CRL) ЦС. Эта информация важна в случаях, когда сертификаты необходимо отозвать. CRL — это подписанные CA списки отозванных сертификатов, публикуемые через регулярные промежутки времени (например, семь дней).

Примечание: возможно, вы заметили, что местоположение CRL не использует защищённый сервер, и вам может быть интересно, является ли ссылка небезопасной. Не является. Поскольку каждый CRL подписан центром сертификации, который его выпустил, браузеры могут проверить его целостность. В том же случае, если бы CRL были доступны по TLS (адрес включал бы в себя протокол HTTPS), то браузеры могут столкнуться с проблемой «курицы и яйца», в которой они хотят проверить статус отзыва сертификата, используемого сервером, доставляющим сам CRL!

Расширение Certificate Policies используется для указания политики, в соответствии с которой был выпущен сертификат. Например, именно здесь можно найти индикаторы расширенной проверки (EV). Индикаторы представлены в форме уникальных идентификаторов объектов (OID) и являются уникальными для выдающего ЦС. Кроме того, это расширение часто содержит один или несколько пунктов CPS, которые обычно являются веб-страницами или документами PDF.

Расширение Authority Information Access (AIA) обычно содержит две важные части информации. Во-первых, он перечисляет адрес ответчика CA OCSP, который можно использовать для проверки отзыва сертификатов в режиме реального времени. Расширение также может содержать ссылку, где находится сертификат эмитента (следующий сертификат в цепочке). В наши дни серверные сертификаты редко подписываются непосредственно доверенными корневыми сертификатами, а это означает, что пользователи должны включать в свою конфигурацию один или несколько промежуточных сертификатов. Ошибки легко сделать, и сертификаты будут признаны недействительными. Некоторые клиенты (например, Internet Explorer) будут использовать информацию, представленную в этом расширении для исправления неполной цепочки сертификатов, но многие клиенты этого не сделают.

Расширения Subject Key Identifier и Authority Key Identifier устанавливают уникальные идентификаторы ключа субъекта и ключа авторизации соответственно. Значение, указанное в расширении Authority Key Identifier сертификата, должно соответствовать значению, указанному в расширении Subject Key Identifier в выдающем сертификате. Эта информация очень полезна в процессе построения пути сертификации, когда клиент пытается найти все возможные пути от конечного (серверного) сертификата до доверенного корня. Центры сертификации часто используют один закрытый ключ с несколькими сертификатами, и это поле позволяет программному обеспечению надёжно определять, какой сертификат может быть сопоставлен с каким ключом. В реальном мире многие цепочки сертификатов, предоставляемые серверами, недействительны, но этот факт часто остаётся незамеченным, поскольку браузеры могут находить альтернативные пути доверия.

Наконец, расширение Subject Alternative Name используется для перечисления всех имен хостов, для которых действителен сертификат. Это расширение раньше было необязательным; если его нет, клиенты возвращаются к использованию информации, представленной в Common Name (CN), которое является частью поля «Subject». Если расширение присутствует, то содержимое поля CN игнорируется во время проверки.

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

Чтобы показать издателя сертификата используйте опцию -issuer:

Опция -fingerprint вычисляет и выводит дайджест DER-кодированной версии всего сертификата. Это обычно называют «отпечатком». Из-за характера дайджестов сообщений, отпечаток сертификата является уникальным для этого сертификата, и два сертификата с одинаковым отпечатком могут считаться одинаковыми. Для сертификатов обычно не нужно сверять сертификаты по отпечаткам, но это имеет смысл при использовании самоподписанных сертификатов (например, получении сертификата для VNC сессии, когда нет другого способа проверить, что сертификат не был подменён при пересылке). В этом случае можно сверить отпечаток сертификата, например, по телефону или электронной почте.

Для показа отпечатка сертификата:

Чтобы вывести сертификат в виде строки символов в стиле C — char, используйте опцию -C:

Чтобы вывести расширения сертификата в текстовой форме, используйте опцию -ext. Несколько расширений можно перечислить через запятую, например «subjectAltName,subjectKeyIdentifier«. Чтобы посмотреть весь список расширений:

Пример команды для вывода альтернативных имён в домене:

Пример информации об альтернативных именах домена:

Для вывода почтовых адресов, содержащихся в сертификате, используйте опцию -email. Адреса электронной почты могут отсутствовать в сертификате.

Для вывода адресов респондентов OCSP, если они присутствуют в сертификате, укажите опцию -ocsp_uri:

Для показа дат из сертификата имеются следующие опции:

Для вывода имени subject укажите опцию -subject:

Пример вывода имени subject сертификата в форме схемы на терминале, поддерживающем UTF8:

Опция -serial выводит серийный номер:

Чтобы извлечь публичный ключ из сертификата используйте опцию -pubkey:

Форматы ключей и сертификатов

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

Бинарный (DER) сертификат

Содержит сертификат X.509 в необработанном виде с использованием кодировки DER ASN.1.

ASCII (PEM) сертификат(ы)

Двоичный (DER) ключ

Содержит закрытый ключ в необработанном виде с использованием кодировки DER ASN.1. OpenSSL создаёт ключи в своём собственном традиционном (SSLeay) формате. Существует также альтернативный формат, называемый PKCS#8 (определённый в RFC 5208), но он не используется широко. OpenSSL может конвертировать в и из формата PKCS#8 с помощью команды pkcs8.

ASCII (PEM) ключ

Содержит ключ DER в кодировке base64, иногда с дополнительными метаданными (например, алгоритм, используемый для защиты паролем).

Сертификат PKCS#7

Сложный формат, предназначенный для транспортировки подписанных или зашифрованных данных, определённый в RFC 2315. Он обычно встречается с расширениями .p7b и .p7c и может при необходимости включать всю цепочку сертификатов. Этот формат поддерживается утилитой keytool Java.

PKCS#12 (PFX) ключ и сертификат(ы)

Сложный формат, который может хранить и защищать ключ сервера вместе со всей цепочкой сертификатов. Обычно встречается с расширениями .p12 и .pfx. Этот формат обычно используется в продуктах Microsoft, но также используется для клиентских сертификатов. В наши дни имя PFX используется как синоним для PKCS#12, хотя в прежние времена под PFX имелся ввиду другой формат (ранняя версия PKCS#12). Вряд ли вы встретите старую версию где-либо.

Конвертация ключей и сертификатов

PEM и DER преобразование

Преобразование сертификата между форматами PEM и DER выполняется с помощью инструмента x509. Чтобы преобразовать сертификат из формата PEM в DER:

Чтобы преобразовать сертификат из DER в формат PEM:

Синтаксис идентичен, если вам нужно преобразовать закрытые ключи между форматами DER и PEM, но используются разные команды: rsa для ключей RSA и dsa для ключей DSA.

Конвертация PKCS#12 (PFX)

Одна команда — это все, что нужно для преобразования ключа и сертификатов в формате PEM в PKCS#12. В следующем примере ключ (fd.key), сертификат (fd.crt) и промежуточные сертификаты (fd-chain.crt) преобразуются в эквивалентный один файл PKCS#12:

Обратное преобразование не так просто. Вы можете использовать одну команду, но в этом случае вы получите все содержимое в одном файле:

Теперь вы должны открыть файл fd.pem в вашем любимом редакторе и вручную разбить его на отдельные ключи, сертификаты и промежуточные файлы сертификатов. Пока вы это делаете, вы заметите дополнительный контент перед каждым компонентом. Например:

Эти дополнительные метаданные очень удобны для быстрой идентификации сертификатов. Очевидно, вы должны убедиться, что основной файл сертификата содержит сертификат конечного сервера, а не что-то ещё. Кроме того, вы также должны убедиться, что промежуточные сертификаты предоставлены в правильном порядке, с сертификатом выдачи, следующим за подписанным. Если вы видите самоподписанный корневой сертификат, можете свободно удалить его или сохранить в другом месте; он не должен входить в цепь.

Предупреждение: конечный результат преобразования не должен содержать ничего, кроме закодированного ключа и сертификатов. Хотя некоторые инструменты достаточно умны, чтобы игнорировать то, что не нужно, другие инструменты — нет. Оставление дополнительных данных в файлах PEM может привести к проблемам, которые трудно устранить.

Можно заставить OpenSSL разделить компоненты для вас, но для этого требуется несколько вызовов команды pkcs12 (включая каждый раз ввод пароля пакета):

Такой подход не сэкономит вам много работы. Вы по-прежнему должны проверять каждый файл, чтобы убедиться, что он содержит правильное содержимое, и удалить метаданные.

Конвертация PKCS#7

Чтобы преобразовать PEM в PKCS#7, используйте команду crl2pkcs7:

Чтобы преобразовать из PKCS#7 в PEM, используйте команду pkcs7 с ключом -print_certs:

Подобно преобразованию из PKCS#12, теперь вы должны отредактировать файл fd.pem, чтобы очистить его и разделить на нужные компоненты.

Где хранятся корневые сертификаты Центров Сертификации (CA) в операционной системе

В операционных системах, как в Linux, так и в Windows с момента установки хранится довольно много корневых сертификатов различных Центров Сертификации. Эти сертификаты являются общесистемными, то есть каждое приложение может использовать их для верификации сертификатов, например, сайтов, почты, программ. Тем не менее практически все веб браузеры, а также некоторые почтовые клиенты не используют общесистемные корневые CA сертификаты, а имеют свой собственный список. Поэтому добавление корневого CA сертификата в систему может не оказать никакое влияние на веб браузеры и сертификаты сайтов.

Итак, важно не только знать где находятся общесистемные корневые CA сертификаты, но и корневые CA сертификаты каждого из интересующего вас приложения.

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

Корневые сертификаты Центров Сертификации (CA) в Linux

Общесистемные корневые CA сертификаты

Консолидированный файл, включающий в себя все корневые сертификаты CA операционной системы, находится в файле /etc/ssl/certs/ca-certificates.crt. Этот файл может быть символической ссылкой на фактическое расположение сертификатов в файлах /etc/ssl/cert.pem или /etc/ca-certificates/extracted/tls-ca-bundle.pem.

Корневые CA сертификаты в виде отдельных файлов расположены в директории /etc/ssl/certs, в этой директории могут быть ссылки на фактическое расположение сертификатов, например, в /etc/ca-certificates/extracted/cadir/.

Для просмотра Subject всех корневых CA сертификатов в системе:

Файл pem чем открыть

Эти сертификаты используются утилитоми curl, wget и другими. Веб-браузеры Chromium и Firefox используют свои собственные хранилища корневых CA сертификатов.

Чтобы узнать, где веб браузеры хранять корневые CA сертификаты в Linux, нам нужно познакомиться с NSS.

Mozilla Network Security Services (NSS)

Network Security Services (NSS) это набор библиотек, разработанных для поддержки кросс-платформенной разработки защищенных клиентских и серверных приложений. Приложения построенные с использование NSS могут использовать SSL v2 и v3, TLS, PKCS#5, PKCS#7, PKCS#11, PKCS#12, S/MIME, сертификаты X.509 v3 и другие стандарты обеспечения безопасности.

В отличие от OpenSSL, NSS использует файлы базы данных в качестве хранилища сертификатов.

NSS начинается с жёстко закодированного списка доверенных сертификатов CA внутри файла libnssckbi.so. Этот список можно просмотреть из любого приложения, использующего NSS, способного отображать (и манипулировать) хранилищем доверенных сертификатов, например, Chrome-совместимые или Firefox-совместимые браузеры.

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

В вашем дистрибутиве скорее всего уже установлен пакет NSS, в некоторых дистрибутивах он называется libnss3 (Debian и производные) в некоторых — nss (Arch Linux, Gentoo и производные).

Если вы хотите просматривать и изменять хранилища сертификатов NSS, то понадобиться утилита certutil. В Arch Linux эта утилита входит в пакет nss и, следовательно, предустановлена в Arch Linux. А в Debian и производные установка делается так:

Google Chrome / Chromium

Как уже было сказано, при работе на Linux, Google Chrome использует библиотеку Mozilla Network Security Services (NSS) для выполнения верификации сертификатов.

Корневые CA сертификаты, которые добавил пользователь, хранятся в файле

/.pki/nssdb/cert9.db, их можно просмотреть командой:

Поскольку Chrome не может удалить сертификаты из хранилища NSS, то если вы отключите некоторые из них в настройках веб браузера (Privacy and security → Manage certificates → Authorities), то в том же файле, где хранятся добавленные пользователем корневые CA сертификаты, будут сохранены изменения о полномочиях отключённого сертификата:

Файл pem чем открыть

Используемые в Google Chrome / Chromium корневые CA сертификаты в Linux можно посмотреть следующим причудливым способом:

1. Найдите расположение файла libnssckbi.so (как было сказано в предыдущем разделе, в нём NSS хранит доверенные корневые сертификаты):

Примеры расположений этого файла:

2. Теперь выполните команду вида:

2. Затем запустите команду:

Вы увидите доверенные корневые сертификаты, которые использует Google Chrome в Linux.

Файл pem чем открыть

Также вы можете просмотреть корневые CA сертификаты в настройках браузера:

Файл pem чем открыть

Конфиденциальность и безопасность (выбрать «Ещё») → Настроить сертификаты → Центры сертификации, на английском это Privacy and security → Manage certificates → Authorities.

Файл pem чем открыть

Firefox

Поскольку Firefox принадлежит Mozilla, то этот веб браузер, конечно, также использует Mozilla Network Security Services (NSS).

Стандартными расположениями папок с базами данных NSS являются:

Firefox НЕ использует ни одно из этих стандартных расположений, база данных хранится в профиле пользователя, который имеет общий вид

Посмотреть корневые сертификаты CA которые использует Firefox в Linux можно следующей командой:

Файл pem чем открыть

У Firefox-esr это папка:

Также вы можете просмотреть корневые CA сертификаты в настройках браузера:

Файл pem чем открыть

Приватность и Защита → Сертификаты → Просмотр сертификатов → Центры сертификации:

Файл pem чем открыть

Thunderbird

Чтобы просмотреть, каким CA доверяет Thunderbird:

Чтобы найти все файлы cert9.db выполните команду:

Корневые сертификаты Центров Сертификации (CA) в Windows

Общесистемные корневые CA сертификаты

Если вы задаётесь вопросом, в какой папке хранятся сертификаты в Windows, то правильный ответ в том, что в Windows сертификаты хранятся в реестре. Причём они записаны в виде бессмысленных бинарных данных. Чуть ниже будут перечислены ветки реестра, где размещены сертификаты, а пока давайте познакомимся с программой для просмотра и управления сертификатами в Windows.

В Windows просмотр и управление доверенными корневыми сертификатами осуществляется в программе Менеджер Сертификатов.

Чтобы открыть Менеджер Сертификатов нажмите Win+r, введите в открывшееся поле и нажмите Enter:

Файл pem чем открыть

Перейдите в раздел «Доверенные корневые центры сертификации» → «Сертификаты»:

Файл pem чем открыть

Здесь для каждого сертификата вы можете просматривать свойства, экспортировать и удалять.

Просмотр сертификатов в PowerShell

Чтобы просмотреть список сертификатов с помощью PowerShell:

Файл pem чем открыть

Чтобы найти определённый сертификат выполните команду вида (замените «HackWare» на часть искомого имени в поле Subject):

Файл pem чем открыть

Теперь рассмотрим, где физически храняться корневые CA сертификаты в Windows. Сертификаты хранятся в реестре Windows в следующих ветках:

Сертификаты уровня пользователей:

Сертификаты уровня компьютера:

Сертификаты уровня служб:

Сертификаты уровня Active Directory:

Файл pem чем открыть

И есть несколько папок и файлов, соответствующих хранилищу сертификатов Windows. Папки скрыты, а открытый и закрытый ключи расположены в разных папках.

Пользовательские сертификаты (файлы):

Компьютерные сертификаты (файлы):

Рассмотрим теперь где хранятся корневые CA сертификаты веб-браузеров.

Google Chrome

Использует общесистемные доверенные корневые центры сертификации.

Файл pem чем открыть

Чтобы перейти к списку сертификатов из веб браузера:

Файл pem чем открыть

Настройки → Приватность и Защита → Безопасность → Управление сертификатами → Просмотр сертификатов → Центры сертификации → Доверенные корневые центры сертификации:

Файл pem чем открыть

Opera

Чтобы перейти к списку сертификатов из веб браузера: Настройки → Перейти к настройкам браузера → Дополнительно → Безопасность → Ещё → Настроить сертификаты → Доверенные корневые центры сертификации:

Файл pem чем открыть

Firefox

Файл pem чем открыть

Приватность и Защита → Сертификаты → Просмотр сертификатов → Центры сертификации:

Файл pem чем открыть

Как добавить корневой сертификат в доверенные

Как добавить корневой сертификат в доверенные в Linux

Как добавить корневой сертификат в доверенные в Linux на уровне системы

Сертификат с расширением .crt можно открыть двойным кликом и просмотреть его содержимое:

Файл pem чем открыть

Если вы работаете в системе от обычного пользователя (не root), то кнопка «Импортировать» будет недоступна.

Чтобы разблокировать кнопку «Импортировать», выполните следующую команду:

Файл pem чем открыть

Данный способ может не сработать, поэтому рассмотрим, как добавить доверенные корневые центры сертификации в командной строке.

Суть метода очень проста:

Пути и команды в разных дистрибутивах Linux чуть различаются.

Просмотреть Subject всех корневых CA сертификатов можно уже знакомой командой:

Для демонстрации я добавлю сертификат с Common Name, включающим «HackWare», тогда для проверки, имеется ли сертификат с таким именем среди корневых CA, я могу использовать команду:

Для добавления своего корневого CA в доверенные в Debian, Kali Linux, Linux Mint, Ubuntu и их производных:

1. Проверьте, существует ли директория /usr/local/share/ca-certificates:

Если её ещё нет, то создайте:

Сертификат должен быть в формате PEM (обычно так и есть) и иметь расширение .crt — если расширение вашего сертификата .pem, то достаточно просто поменять на .crt.

2. Скопируйте ваш сертификат командой вида:

3. Запустите следующую команду для обновления общесистемного списка:

Файл pem чем открыть

Проверим наличие нашего CA сертификата среди доверенных:

Сертификат успешно найден:

Файл pem чем открыть

Для добавления своего корневого CA в доверенные в Arch Linux, BlackArch и их производных:

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

2. Обновите общесистемный список доверенных CA:

Чтобы удалить этот сертификат:

Добавление сертификатов в базу данных NSS

Некоторые приложения используют базу данных NSS, и у вас может быть необходимость добавить доверенные CA в неё.

Последующие изменения повлияют только на приложения, использующие базу данных NSS и учитывающие файл /etc/pki/nssdb.

1. Сначала создайте структуру каталогов для системных файлов базы данных NSS:

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

2. Убедитесь, что файлы базы данных доступны для чтения всем:

Примечание: вышеприведённые инструкции применимы только в том случае, если пока не существует общесистемного набора файлов базы данных NSS. Если он уже существует, то важно знать пароль для этого набора баз данных (конечно, если он защищён паролем).

3. Теперь, когда доступны файлы базы данных NSS, добавьте сертификат в хранилище следующим образом:

Биты доверия, используемые в приведённом выше примере, помечают сертификат как надёжный для подписи сертификатов, используемых для связи SSL/TLS. Имя (указывается после опции -n), используемое в команде, можно выбрать любое, но убедитесь, что его легко отличить от других сертификатов в магазине.

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

Удаление из файлов базы данных NSS

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

Как добавить корневой сертификат в доверенные в Linux в веб браузеры

Chrome, Chromium, Firefox и созданные на их основе веб браузеры доверяют корневым сертификатам, установленным на уровне системы. То есть вам достаточно добавить в доверенные CA сертификат как это показано в предыдущем разделе.

Причём эти браузеры хотя и используют NSS, они игнорируют общесистемные сертификаты NSS, которые можно добавить в файл /etc/pki/nssdb!

Тем не менее приложения, которые используют NSS (такие как Firefox, Thunderbird, Chromium, Chrome) хранят свои списки доверенных сертификатов в файлах cert9.db. Чтобы добавить свой сертификат в каждый из этих файлов можно использовать скрипт.

Сохранить следующий код в файл CAtoCert9.sh:

В этом файле измените значение certfile на имя файла вашего сертификата и значение certname на имя вашего сертификата, сохраните и закройте файл.

Затем запустите его следующим образом:

В результате в домашней папке пользователя будут найдены все файлы cert9.db и в каждый из них будет добавлен указанный CA сертификат.

Вы можете добавить CA сертификаты в графическом интерфейсе каждого браузера.

Файл pem чем открыть

Файл pem чем открыть

Нажмите кнопку «Импорт»:

Файл pem чем открыть

Выберите файл с сертификатом.

Укажите, какие полномочия вы даёте этому сертификату:

Файл pem чем открыть

Файл pem чем открыть

Файл pem чем открыть

Нажмите кнопку «Импортировать»:

Файл pem чем открыть

Выберите файл с сертификатом.

Укажите, какие полномочия вы даёте этому сертификату:

Файл pem чем открыть

Как добавить корневой сертификат в доверенные в Windows

Как добавить корневой сертификат в доверенные в Windows на уровне системы

1. Мастер импорта сертификатов

Если сертификат имеет расширение .crt, то его достаточно запустить двойным кликом:

Файл pem чем открыть

В открывшемся окне нажмите кнопку «Установить сертификат»:

Файл pem чем открыть

Выберите один из вариантов:

Файл pem чем открыть

Выберите «Пометить все сертификаты в следующие хранилища»:

Файл pem чем открыть

Нажмите кнопку «Обзор» и выберите «Доверенные корневые центры сертификации»:

Файл pem чем открыть

Нажмите «Далее»:

Файл pem чем открыть

Нажмите «Готово»:

Файл pem чем открыть

Сообщение об успешном импорте:

Файл pem чем открыть

Теперь сертификат будет доступен в Менеджере Сертификатов:

Файл pem чем открыть

2. Добавление root CA сертификата в Менеджере Сертификатов

Чтобы открыть Менеджер Сертификатов нажмите Win+r, введите в открывшееся поле и нажмите Enter:

Файл pem чем открыть

Кликните правой кнопкой мыши по пункту «Доверенные корневые центры сертификации», выберите пункт «Все задачи» → «Импорт»:

Файл pem чем открыть

Нажмите «Далее»:

Файл pem чем открыть

Укажите папку и имя файла:

Файл pem чем открыть

Нажмите «Далее»:

Файл pem чем открыть

Файл pem чем открыть

Файл pem чем открыть

Теперь действительно всё готово:

Файл pem чем открыть

Только что импортированный сертификат в Менеджере Сертификатов:

Файл pem чем открыть

Как добавить корневой сертификат в доверенные в Windows в веб браузеры

Chrome, Chromium, Opera и сделанные на их основе веб браузеры используют общесистемные корневые CA сертификаты. То есть для добавления новых доверенных CA достаточно добавить их в систему, как это показано выше.

Firefox использует исключительно своё хранилище. Для добавления корневых сертификатов CA в Firefox нужно сделать так:

Файл pem чем открыть

Файл pem чем открыть

Нажмите кнопку «Импортировать»:

Файл pem чем открыть

Выберите файл с сертификатом.

Укажите, какие полномочия вы даёте этому сертификату:

Файл pem чем открыть

Цепи сертификатов

На практике, корневые Центры Сертификации (CA) сейчас уже практически не подписывают сертификаты для веб сайтов. Корневые CA делегируют свои полномочия для подписания сертификатов сайтов другим организациям — промежуточным CA. Именно к ним мы обращаемся, когда покупаем или получаем на 3 месяца бесплатный сертификат для сайта.

Этих промежуточных Центров Сертификации довольно много и их сертификаты НЕ хранятся у пользователей для валидации (проверки подлинности) сертификатов сайтов.

Поэтому описанная выше схема на практике является в настоящее время неактуальной:

На самом деле всё происходит так:

Главное практическое следствие из этого — при валидации сертификатов нужно получить и использовать промежуточные сертификаты.

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

Главное правило, когда сертификат и промежуточные сертификаты собраны в один файл: первым идёт сертификат сайта, затем сертификат подписавшего CA. Корневые сертификаты указывать НЕ нужно, поскольку они уже есть у пользователей.

Промежуточных CA может быть несколько, поэтому промежуточных сертификатов также может быть несколько.

Мы уже рассмотрели некоторые расширения X.509, одно из них Authority Information Access (AIA). Частью поля AIA является CA Issuers, в нём содержится информация об издатели сертификата. Она может быть полезной, когда веб сервер не предоставил цепочку доверенных сертификатов.

Если перейти по ссылке http://cert.int-x3.letsencrypt.org/, то будет скачен сертификат промежуточного CA, подписавшего сертификат сайта. Этот сертификат в формате DER и он может быть конвертирован в формат PEM как это показано выше в разделе о конвертации форматов ключей и сертификатов.

Верификация (проверка) сертификатов

Для проверки действительности сертификата используется команда

В разделе «Как создать сертификаты SSL (TLS) для сайтов» мы создали сертификат mydomain.com.crt, попробуем проверить его:

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

С помощью опции -CAfile можно указать сертификат доверенного Центра Сертификации:

Как можно увидеть, проверка подлинности прошла успешно:

Файл pem чем открыть

Чтобы было поинтереснее, возьмём реальные сертификаты сайта и промежуточного центра сертификации:

Файл pem чем открыть

Вы увидите сертификаты (один или несколько), найдите по полю CN сначала сертификат домена w-e-b.site:

И скопируйте содержимое начиная с ——BEGIN CERTIFICATE—— и заканчивая ——END CERTIFICATE——. Затем сохраните это в файл w-e-b.site.crt.

Затем найдите сертификат центра сертификации и сохраните его в файл x3.crt:

Файл pem чем открыть

Итак, для наших экспериментов у нас появилось два новых файла: w-e-b.site.crt (сертификат сайта) и x3.crt (сертификат промежуточного Центра Сертификации).

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

Файл pem чем открыть

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

Проверим подлинность промежуточного сертификата организации, которая подписала сертификат сайта:

Файл pem чем открыть

Как можно увидеть на скриншоте, с этим сертификатом всё в порядке.

Дело в том, что команда openssl verify сверяет подпись в сертификате с коревыми Центрами Сертификации, чьи сертификаты установлены в операционной системе как доверенные. Мы можем убедиться в этом. Следующая команда покажет организацию, подписавшую сертификат x3.crt:

Файл pem чем открыть

Имя издателя в поле CN (Common Name) DST Root CA X3.

Убедимся, что сертификат этого CA действительно есть в системе:

Файл pem чем открыть

Если мы посмотрим, кто выдал сертификат сайта w-e-b.site:

То увидим, что это Let’s Encrypt Authority X3.

Посмотрим имя организации в сертификате x3.crt:

Имя совпало — это также Let’s Encrypt Authority X3.

Файл pem чем открыть

То есть в целом цепочка понятна — сертификат w-e-b.site.crt выдан организацией Let’s Encrypt Authority X3, а её полномочия по выдаче сертификатов заверяет DST Root CA X3, которая в операционной системе находится среди доверенных корневых Центрах Сертификации.

Чтобы автоматически выполнить проверку всей цепочки с помощью openssl verify, нам нужно указать промежуточный сертификат после опции -untrusted. Если промежуточных сертификатов несколько, то нужно указать их все — опцию -untrusted можно использовать несколько раз.

Файл pem чем открыть

Опция -show_chain покажет информацию о цепочке сертификатов, которая была построена:

Файл pem чем открыть

Опции -verify_hostname ИМЯ-ХОСТА и -verify_ip IP позволяют проверить, действительно ли сертификат выдан для указанного хоста или IP адреса. Чтобы проверка прошла успешно, имя хоста должно быть в Subject Alternative Name или Common Name в subject сертификата. А IP адрес должен быть в Subject Alternative Name в subject сертификата. Пример:

Файл pem чем открыть

Следующими тремя командами вы можете проверить, соответствует ли SSL сертификат приватному ключу:

Для SSL сертификата выполните команду вида:

Для приватного ключа RSA выполните команду вида:

Замените ФАЙЛ на имя ваших файлов. Для всего перечисленного выше — SSL сертификата, приватного ключа и запроса на подпись — хеш должен быть одинаковым.

Проверка настройки HTTPS

Команда s_client выполняет функции SSL/TLS клиента для подключения к удалённому хосту с использованием SSL/TLS. Данная программа позволяет подключаться с различными настройками SSL/TLS — выбирать используемые шифры, версию рукопожатия, использовать определённые протоколы, тестировать повторное использование сессий. При этом программа показывает все переданные и полученные во время SSL/TLS подключения данные. Благодаря этому возможна доскональная проверка настроек сервера SSL/TLS, тестирование списка отзыва сертификатов и даже проверка на уязвимости.

Выполнив SSL/TLS подключение, s_client позволяет вводить данные, например, отправлять заголовки HTTP протокола, команды SMTP, FTP и т.д.

Для подключения к удалённому хосту укажите адрес домена и порт (обычно это 443) с опцией -connect:

1. верификацию и цепочку сертификатов

2. сертификат сайта

Файл pem чем открыть

3. данные текущей сессии — SSL/TLS (ассиметричное шифрование) используются для обмена ключом для симметричного шифрования, поскольку ассиметричное слишком «затратное». И фактический шифрование данных будет выполняться «паролем» (ключами сессии, а не сертификатом). Эти ключи меняются при каждой новой сессии.

Файл pem чем открыть

То есть, компрометация приватного ключа сервера ≠ расшифровка трафика. Поскольку необходимо знать все ключи сессии. Раньше, зная приватный ключ сервера, можно было расшифровать SSL трафик — сначала расшифровывались ключи сессии, а затем они использовались для расшифровки данных. Но теперь используется Perfect Forward Secrecy (которая применяет Diffie-Hellman key exchange (DH)), что привело к тому, что третья сторона, даже зная приватный ключ RSA (приватный ключ сервера), не сможет расшифровать TLS трафик.

Как видеть все сертификаты, которые отправляет HTTPS сервер

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

Для yandex.ru будет выведено 3 сертификата: 1 сертификат сайта и 2 промежуточных.

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

Чтобы сохранить сертификат сайта в файл используйте следующую команду (дважды замените w-e-b.site на интересующий вас домен):

Если вы хотите сохранить всю присылаемую цепочку сертификатов, то сделайте так (дважды замените w-e-b.site на интересующий вас домен):

Проверка TLS/SSL веб-сайта с указанием Центра Сертификации

Если веб-сайт использует самостоятельно созданный сертификат, который не подписан Глобальными Центрами Сертификации, то с помощью опции -CAfile можно указать сертификат того CA, который вы использовали для подписи:

Это подходит, например, для тестирования сгенерированных сертификатов на локальном сервере без добавления самодельного CA в корневые Центры Сертификации ОС.

Тестирование протоколов, которые обновляются до SSL

При использовании с HTTP TLS оборачивает весь текстовый канал связи в HTTPS. Некоторые другие протоколы начинаются как открытый текст, но затем они переходят на шифрование. Если вы хотите протестировать такой протокол, вам нужно сообщить OpenSSL, какой это протокол, чтобы он мог обновляться от вашего имени. Укажите информацию о протоколе с помощью ключа -starttls. Например:

Поддерживаются в частности следующие протоколы: smtp, pop3, imap, ftp и xmpp.

Отладка SSL/TLS к HTTPS

Во время установки соединения SSL/TLS «под капотом» выполняется много работы. Если у нас есть какие-то проблемы или нам нужна подробная информация об инициализации SSL/TLS, мы можем использовать опцию -tlsextdebug, как показано ниже.

Поддержка протокола тестирования

По умолчанию s_client будет пытаться использовать лучший протокол для связи с удаленным сервером и сообщать согласованную версию в выходных данных.

Если вам нужно протестировать поддержку определённых версий протокола, у вас есть два варианта. Вы можете явно выбрать один протокол для тестирования, указав один из ключей —ssl3, -tls1, -tls1_1, -tls1_2 или -tls1_3. Кроме того, вы можете выбрать протоколы, которые вы не хотите тестировать, используя один или несколько из следующих параметров: -no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2 или -no_tls1_3.

Примечание: не все версии OpenSSL поддерживают все версии протокола. Например, более старые версии OpenSSL не будут поддерживать TLS 1.2 и TLS 1.3, а более новые версии могут не поддерживать более старые протоколы, такие как SSL 2 и SSL 3. К примеру, при попытке использовать опцию -ssl3 на современных версиях OpenSSL возникает ошибка:

Интерактивные запросы с s_client

Как вы можете увидеть, подключение с помощью s_client не прекращается до истечении таймаута — программа и сервер ожидают ввод данных.

К примеру, выполним подключение:

Вместо HTTP метода GET использовался HEAD — в результате показана не страница, а только HTTP заголовки.

Файл pem чем открыть

Получение HTML кода страницы (пример использования метода GET с запросом адреса страницы):

При использовании s_client всегда возникает ошибка «HTTP/1.1 400 Bad Request»

На некоторых серверах при использовании s_client и попытке ввести любые HTTP заголовки возникает ошибка «400 Bad Request».

Как можно понять из текста ошибки — сервер получил плохой запрос. Причины могут быть разными:

Например, подключимся к серверу:

Попробуем ввести первый заголовок и нажмём Enter:

Сразу после этого возникнет ошибка — ваш браузер отправил запрос, который этот сервер не может понять:

Файл pem чем открыть

В данном случае необходимо использовать опцию -crlf, она переводит line feed от терминала в CR+LF, как этого требуют некоторые серверы:

После этого сервер нормально пример HTTP заголовки.

Для того, чтобы s_client перестал ожидать ввод и отправил данные на сервер, нажмите Enter дважды.

Как создать Корневой Центр Сертификации (Root CA)

Создание частного центра сертификации

Если вы хотите настроить свой собственный CA, все, что вам нужно, уже включено в OpenSSL. Пользовательский интерфейс основан исключительно на командной строке и, следовательно, не очень удобен для пользователя, но это, возможно, к лучшему. Прохождение процесса очень познавательно, потому что заставляет задуматься о каждом аспекте, даже мельчайших деталях.

Образовательный аспект установки частного CA является основной причиной, по которой я бы рекомендовал это делать, но есть и другие. ЦС на основе OpenSSL, какой бы грубой он ни был, вполне может удовлетворить потребности отдельного человека или небольшой группы. Например, гораздо лучше использовать частный ЦС в среде разработки, чем везде использовать самозаверяющие (самоподписанные) сертификаты. Точно так же клиентские сертификаты, которые обеспечивают двухфакторную аутентификацию, могут значительно повысить безопасность ваших конфиденциальных веб-приложений.

Самая большая проблема в работе частного ЦС — это не настройка всего, а обеспечение безопасности инфраструктуры. Например, корневой ключ должен храниться в автономном режиме, потому что от него зависит вся безопасность. С другой стороны, CRL и сертификаты респондента OCSP должны регулярно обновляться, что требует перевода рута в оперативный режим.

Проходя этот раздел, вы создадите два файла конфигурации: один для управления корневым центром сертификации (root-ca.conf), а другой — для управления подчиненным центром сертификации (sub-ca.conf). Несмотря на то, что вы сможете делать все с нуля, просто следуя моим инструкциям, вы также можете загрузить шаблоны файлов конфигурации из моей учётной записи GitHub. Последний вариант сэкономит вам некоторое время, но первый подход даст вам лучшее понимание в вовлечённую работа.

Особенности и ограничения

В оставшейся части этого раздела мы собираемся создать частный ЦС, который по своей структуре аналогичен общедоступным ЦС. Будет один корневой ЦС, из которого могут быть созданы другие подчинённые ЦС. Мы предоставим информацию об аннулировании через CRL и респондентов OCSP. Для поддержания корневого ЦС в автономном режиме ответчики OCSP будут иметь свои собственные идентификационные данные. Это не самый простой частный центр сертификации, который вы могли бы иметь, но он может быть надёжно защищён. В качестве бонуса подчинённый ЦС будет технически ограничен, что означает, что ему будет разрешено выдавать сертификаты только для разрешённых имён хостов.

После завершения установки корневой сертификат должен быть безопасно распространён среди всех предполагаемых клиентов. Как только корень будет установлен, вы можете начать выпуск сертификатов клиента и сервера. Основным ограничением этой настройки является то, что ответчик OCSP предназначен главным образом для тестирования и может использоваться только для более лёгких нагрузок.

Создание корневого центра сертификации

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

Конфигурация корневого центра сертификации

Прежде чем мы сможем создать CA, нам нужно подготовить файл конфигурации (root-ca.conf), который сообщит OpenSSL, как именно мы хотим, чтобы все было настроено. Файлы конфигурации не требуются большую часть времени при обычном использовании, но они необходимы, когда речь идёт о сложных операциях, таких как создание корневого ЦС. Конфигурационные файлы OpenSSL являются мощными; прежде чем продолжить, предлагаю вам ознакомиться с их возможностями (man config в командной строке).

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

Вторая часть напрямую контролирует работу ЦС. Для получения полной информации о каждом параметре обратитесь к документации по команде ca (man ca в командной строке). Большинство настроек говорят сами за себя; мы в основном сообщаем OpenSSL, где мы хотим хранить наши файлы. Поскольку этот корневой ЦС будет использоваться только для выдачи подчинённых ЦС, я решил, что сертификаты действительны в течение 10 лет. Для алгоритма подписи по умолчанию используется безопасный SHA256.

Политика по умолчанию (policy_c_o_match) настроена таким образом, чтобы все сертификаты, выпущенные из этого CA, имели поля countryName и organizationName, которые совпадают с полями CA. Это не может быть сделано общедоступным ЦС, но подходит для частного ЦС:

Третья часть содержит конфигурацию команды req, которая будет использоваться только один раз при создании самозаверяющего (самоподписанного) корневого сертификата. Наиболее важные части находятся в расширениях: расширение basicConstraints указывает, что сертификат является CA, а keyUsage содержит соответствующие параметры для этого сценария:

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

Все подчинённые ЦС будут ограничены, что означает, что выданные ими сертификаты будут действительны только для подмножества доменных имён и ограниченного использования. Во-первых, расширение extendedKeyUsage указывает только clientAuth и serverAuth, которые являются TLS-аутентификацией клиента и сервера. Во-вторых, расширение nameConstraints ограничивает допустимые имена хостов только доменными именами example.com и example.org. Теоретически, эта настройка позволяет вам передавать контроль над подчинёнными ЦС кому-то ещё, но при этом быть уверенным, что они не могут выдавать сертификаты для произвольных имён хостов. Если вы хотите, вы можете ограничить каждый подчинённый ЦС небольшим пространством имён домена. Требование об исключении двух диапазонов IP-адресов исходит из базовых требований CA/Browser Forum, в которых содержится определение технически ограниченных подчинённых CA.

На практике ограничения имён не совсем практичны, потому что некоторые основные платформы в настоящее время не распознают расширение nameConstraints. Если вы отметите это расширение как критическое, такие платформы будут отклонять ваши сертификаты. У вас не возникнет таких проблем, если вы не отметите их как критические (как в примере), но некоторые другие платформы не будут применять их.

Пятая и последняя часть конфигурации определяет расширения, которые будут использоваться с сертификатом для подписи ответов OCSP. Чтобы иметь возможность запускать ответчик OCSP, мы генерируем специальный сертификат и делегируем ему возможность подписи OCSP. Этот сертификат не является центром сертификации, это вы можете увидеть по расширениям:

Структура корневого ЦС

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

Используются следующие подкаталоги:

certs/

Хранение сертификатов; новые сертификаты будут размещены здесь по мере их выпуска.

Этот каталог используется для базы данных сертификатов (index) и файлов, которые содержат следующий сертификат и серийные номера CRL. OpenSSL создаст несколько дополнительных файлов по мере необходимости.

private/

В этом каталоге будут храниться закрытые ключи, один для ЦС, а другой для ответчика OCSP. Важно, чтобы ни один другой пользователь не имел к нему доступа. (На самом деле, если вы собираетесь серьёзно относиться к ЦС, на компьютере, на котором хранится корневой материал, должно быть только минимальное количество учётных записей пользователей.)

Примечание: при создании нового сертификата CA важно инициализировать серийные номера сертификатов с помощью генератора случайных чисел, как я делаю в этом разделе. Это очень полезно, если вам когда-нибудь придётся создавать и развёртывать несколько сертификатов CA с одним и тем же отличительным именем (обычно, если вы допустили ошибку и вам нужно начать заново); конфликтов не будет, потому что сертификаты будут иметь разные серийные номера.

Генераци Root CA

На втором этапе мы создаем самозаверяющий сертификат. Ключ -extensions указывает на раздел ca_ext в файле конфигурации, который активирует расширения, подходящие для корневого ЦС:

Структура файла базы данных

База данных в db/index представляет собой обычный текстовый файл, содержащий информацию о сертификате, по одному сертификату на строку. Сразу после создания корневого ЦС он должен содержать только одну строку:

Каждая строка содержит шесть значений, разделённых символами табуляции:

Операции корневого центра сертификации

Чтобы создать CRL из нового CA, используйте ключ -gencrl команды ca:

Чтобы выдать сертификат, вызовите команду ca с нужными параметрами. Важно, чтобы переключатель -extensions указывал на правильный раздел в файле конфигурации (например, вы ведь не хотите создавать другой корневой ЦС).

Чтобы отозвать сертификат, используйте ключ -revoke команды ca; Вам понадобится копия сертификата, который вы хотите отозвать. Поскольку все сертификаты хранятся в каталоге certs/, вам нужно знать только серийный номер. Если у вас есть отличительное имя, вы можете посмотреть серийный номер в базе данных.

Выберите правильную причину для значения в ключе -crl_reason. Значение может быть одним из следующих: unspecified, keyCompromise, CACompromise, affiliationChanged, superseded, cessationOfOperation, certificateHold и removeFromCRL.

Создание сертификата для подписи OCSP

Сначала мы создаём ключ и CSR для респондента OCSP. Эти две операции выполняются так же, как и для любого сертификата не-CA, поэтому мы не указываем файл конфигурации:

Во-вторых, используйте корневой центр сертификации для выдачи сертификата. Значение параметра -extensions указывает ocsp_ext, который обеспечивает установку расширений, подходящих для подписи OCSP. Срок действия нового сертификата уменьшен до 365 дней (по умолчанию 3650). Поскольку эти сертификаты OCSP не содержат информации об аннулировании, они не могут быть отозваны. По этой лучше, чтобы срок службы был как можно короче. Хороший выбор — 30 дней, при условии, что вы готовы часто создавать новый сертификат:

Теперь у вас есть все, что нужно для запуска респондента OCSP. Для тестирования вы можете сделать это с того же компьютера, на котором находится корневой ЦС. Однако для производства вы должны переместить ключ респондента OCSP и сертификат в другое место:

Вы можете проверить работу ответчика OCSP с помощью следующей команды:

В выходных данных проверка «OK» означает, что подписи были правильно проверены, а «good» означает, что сертификат не был отозван.

Создание подчинённого ЦС

Процесс генерации подчинённого ЦС во многом отражает процессы в корневом ЦС. В этом разделе я выделю различия только в случае необходимости. Для всего остального, обратитесь к предыдущему разделу.

Конфигурация подчинённого ЦС

Чтобы создать файл конфигурации (sub-ca.conf) для подчинённого ЦС, начните с файла, который мы использовали для корневого ЦС, и внесите изменения, перечисленные в этом разделе. Мы изменим имя на sub-ca и будем использовать другое отличительное имя. Мы установим респондент OCSP на другой порт, но только потому, что команда ocsp не понимает виртуальные хосты. Если вы используете правильный веб-сервер для респондента OCSP, вы можете вообще не использовать специальные порты. Срок действия новых сертификатов по умолчанию составит 365 дней, и мы будем генерировать новый CRL один раз каждые 30 дней.

Изменение copy_extensions на copy означает, что расширения из CSR будут скопированы в сертификат, но только если они ещё не установлены в нашей конфигурации. С этим изменением тот, кто готовит CSR, может поместить в него необходимые альтернативные имена, и информация оттуда будет собрана и помещена в сертификат. Эта функция несколько опасна (вы позволяете кому-то другому иметь ограниченный прямой контроль над тем, что входит в сертификат), но я думаю, что это нормально для небольших сред:

В конце файла конфигурации мы добавим два новых профиля, по одному для сертификатов клиента и сервера. Единственная разница заключается в расширениях keyUsage и extendedKeyUsage. Обратите внимание, что мы указываем расширение basicConstraints, но устанавливаем его в false. Мы делаем это, потому что мы копируем расширения из CSR. Если бы мы оставили это расширение, мы могли бы в конечном итоге использовать одно из указанных в CSR:

После того, как вы довольны файлом конфигурации, создайте структуру каталогов, следуя тому же процессу, что и для корневого центра сертификации. Просто используйте другое имя каталога, например, sub-ca.

Генерация подчинённого ЦА

Как и прежде, мы предпринимаем два шага для создания подчинённого ЦС. Сначала мы генерируем ключ и CSR. Вся необходимая информация будет взята из файла конфигурации, когда мы используем ключ -config.

Операции подчинённого ЦС

Чтобы выдать сертификат сервера, обработайте CSR, указав server_ext в ключе -extensions:

Чтобы выдать сертификат клиента, обработайте CSR, указав client_ext в ключе -extensions:

Примечание: при запросе нового сертификата вся его информация будет представлена вам для проверки до завершения операции. Вы должны всегда следить за тем, чтобы все было в порядке, но особенно если вы работаете с CSR, подготовленным кем-то другим. Обратите особое внимание на отличительное имя сертификата, а также на базовые ограничения и расширения субъекта альтернативного имени.

Создание CRL и отзыв сертификата такие же, как для корневого CA. Единственное, что отличается от ответчика OCSP — это порт; подчинённый ЦС должен использовать 9081. Рекомендуется, чтобы респондент использовал свой собственный сертификат, чтобы избежать начилие подчинённого ЦС на общедоступном сервере.

Шифрование файлов в OpenSSL

OpenSSL поддерживает симметричное и ассиметричное шифрование данных (файлов и строк). Для симметричного шифрования и расшифровки достаточно указать пароль, для ассиметричное шифрования предварительно нужно сгенерировать приватный ключ и публичный ключ.

Для шифрования файлов вместо OpenSSL рекомендуется использовать инструмент gpg. С этим инструментом вы можете познакомиться в статье «Как пользоваться gpg: шифрование, расшифровка файлов и сообщений, подпись файлов и проверка подписи, управление ключами».

Симметричное шифрование файлов в OpenSSL

Данный вид шифрования выполняется командой enc. Кстати она также задействуется при создании ключей, если выбрано их шифрование — это шифрование выполняется с помощью enc.

Для шифрования используется команда следующего вида:

Для расшифровки похожая команда, но с опцией -d, также ЗАШИФРОВАНЫЕ-ДАННЫЕ теперь являются входными, а на выходе РАСШИФРОВАННЫЕ-ДАННЫЕ:

В качестве ШИФРА рекомендуют aes-256-cbc, а полный список шифров вы можете посмотреть командой:

Ещё настоятельно рекомендуется использовать опцию -iter ЧИСЛО. Она использует указанное ЧИСЛО итераций для пароля при получении ключа шифрования. Высокие значения увеличивают время, необходимое для взлома пароля брут-форсом зашифрованного файла. Эта опция включает использование алгоритма PBKDF2 для получения ключа. Указывать можно высокие значения — десятки и сотни тысяч. В разделе «Как создать базу данных KeePass» при создании базы данных используется такой же алгоритм (первая версия), там для 1 секундной задержки я выставлял значение в 25 миллионов инераций.

Пример шифрования файла art.txt шифром aes-256-cbc, зашифрованные данные будут помещены в файл с именем art.txt.enc, при получении ключа шифрования используется десять миллионов итераций (на моём железе выполнение команды заняло несколько секунд):

Введите, а затем подтвердите пароль для шифрования:

Файл pem чем открыть

В результате будет создан зашифрованный файл art.txt.enc.

Для расшифровки файла art.txt.enc и сохранения данных в файл art-new.txt:

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

Файл pem чем открыть

В случае неудачной расшифровки будет показано примерно следующее:

Возможные причины ошибки:

Обратите внимание, что для расшифровки также нужно указать опцию -iter с тем же самым значением, которое было указано при шифровании. Конечно, можно не использовать опцию -iter при шифровании (а, следовательно, и при расшифровке), но в этом случае шифрование считается ненадёжным! Не рекомендуется пропускать опцию. Если у вас слабое железо ИЛИ если файл будет расшифровываться на слабом железе, то вам необязательно использовать такие большие значения -iter — укажите хотя бы десятки или сотни тысяч (например, полмиллиона).

Предыдущие команды для шифрования и расшифровки могут запускаться чуть иначе:

То есть пропускается слово enc, и перед шифром убирается дефис. Обе команды равнозначны.

Зашифрованный файл представляет собой бинарные данные, которые не получится передать, например, в текстовом сообщении (в чате). Используя опцию -a (или её псевдоним -base64), можно закодировать зашифрованные данные в кодировку Base64:

Содержимое полученного файла art.txt.b64 можно открыть любым текстовым редактором и переслать в мессенджере или в чате.

Для расшифровки также нужно указать опцию -a:

Чтобы просто закодировать бинарный файл в кодировку base64:

Чтобы раскодировать этот файл:

Чтобы зашифровать файл используя указанный ПАРОЛЬ в команде (не интерактивный режим):

Зашифровать файл, затем закодировать его с помощью base64 (например, его можно отправить по почте), используя AES-256 в режиме CTR и с получением производной ключа PBKDF2:

Как зашифровать строки в OpenSSL (симметричное шифрование)

Следует помнить, что для шифрования используется весь набор символов ASCII, включая непечатаемые символы. Если вы хотите иметь возможность вырезать и вставлять зашифрованные данные из консоли или текстового файла, вам нужно преобразовать их только в печатные символы. Вы можете сделать это с опцией -base64 (или -a):

Расшифровка делается таким же образом (нужно дополнительно указать опцию -d):

Файл pem чем открыть

ВНИМАНИЕ: Если вы используете openssl, то можно предположить, что конфиденциальность данных и, следовательно, пароль, важны для вас. Если это так, вы никогда не должны указывать пароль в командной строке, потому что он может быть показан любому, кто имеет право запускать ps (смотрите Как использовать команду ps для мониторинга процессов Linux).

Лучшее решение — сохранить пароль в переменной окружения и открыть его с помощью openssl:

Асимметричное шифрование файлов в OpenSSL

Необходимо сгенерировать приватный ключ и извлечь из него публичный ключ. Публичным ключом данные будут шифроваться, а приватным ключом — расшифровываться. Команды для генерации ключей уже рассмотрены выше, напомним их (в данном случае приватный ключ будет сохранён в файл private.key):

Для извлечения публичного ключа в файл (public.key) из приватного ключа (private.key):

Для шифрования файла:

Описанным методом невозможно зашифровать большие файлы!

Рассмотрим парочку способов обхода проблемы с невозможностью зашифровать большие файлы.

1. Ассиметричное шифрование для симметричного ключа

Сгенерируйте симметричный ключ, которым вы сможете зашифровывать большие файлы:

Зашифруйте большие файлы используя симметричный ключ (как это показано в предыдущем разделе):

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

Удаляем незашифрованный симметричный ключ, чтобы никто его не узнал:

Теперь отправляем зашифрованный симметричный ключ (key.bin.enc) и зашифрованный большой файл (БОЛЬШОЙ-ФАЙЛ.enc) другому лицу.

Другое лицо может при получении расшифровать симметричный ключ используя свой приватный ключ:

Теперь он сможет использовать симметричный ключ для расшифровки файла:

2. С помощью команды smime

Решение для безопасного и высокозащищенного кодирования любого файла в OpenSSL и командной строке:

Для шифрования файлов вы должны иметь готовый сертификат X.509 в формате PEM.

Сгененировать незашифрованный приватный ключ вместе с сертификатом можно следующей командой:

Сгененировать зашифрованный приватный ключ вместе с сертификатом можно следующей командой:

С уже существующим зашифрованным или незашифрованным приватным ключом сертификат можно создать следующей командой:

Чтобы зашифровать файл выполните:

Эта команда может очень эффективно сильно шифровать большие файлы независимо от их формата.

Известная проблема: что-то не так происходит, при попытках зашифровать огромный файл (> 600 МБ). Ошибка не выводится, но зашифрованный файл будет повреждён. Всегда проверяйте каждый файл! (или используйте PGP — больше поддержки шифрования файлов с открытым ключом).

Итак, при симметричном шифровании нужно выбрать хороший алгоритм шифроания и не забыть указать большое количество итераций. А для асимметричного шифрования имеются ограничения и костыли. По этой причине вновь рекомендуется использовать gpg: «Как пользоваться gpg: шифрование, расшифровка файлов и сообщений, подпись файлов и проверка подписи, управление ключами».

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *