Debian — Подробная информация о пакете libcrypt-openssl-rsa-perl в sid
в именах пакетовв описаниях пакетовв именах пакетов исходного кодав содержимом пакетоввсе параметры
[ stretch ] [ buster ] [ bullseye ] [ bookworm ] [ sid ]
[ Источник: libcrypt-openssl-rsa-perl ]
module for RSA encryption using OpenSSL
Crypt::OpenSSL::RSA is a Perl module that provides glue to the RSA functions in the OpenSSL library. It provides the following functionalities: create a key from a string, make a new key, save key to a string, save public portion of key to a string using format compatible with OpenSSL’s command-line rsa tool, encrypt, decrypt, sign, verify, return the size in bytes of a key, check the validity of a key.
Теги: Разработка программного обеспечения: Разработка на Perl, Библиотеки, Реализовано на: implemented-in::c, implemented-in::perl, Роль: Библиотека разработчика
Другие пакеты, относящиеся к libcrypt-openssl-rsa-perl
|
|
|
|
- dep: libc6 (>= 2. 34) [не alpha, ia64, sparc64]
- библиотека GNU C: динамически подключаемые библиотеки
также виртуальный пакет, предоставляемый libc6-udeb
- dep: libc6 (>= 2.4) [sparc64]
- dep: libcrypt-openssl-bignum-perl
- Perl module to access OpenSSL multiprecision integer arithmetic libraries
- dep: libcrypt-openssl-random-perl
- module to access the OpenSSL pseudo-random number generator
- dep: libssl3 (>= 3.0.0)
- инструментарий Secure Sockets Layer — разделяемые библиотеки
- dep: perl (>= 5.34.0-3) [sh5]
- практический язык Ларри Уолла для извлечения данных и составления отчётов
- dep:
perl
(>= 5.
- dep: perl (>= 5.34.0-5) [не m68k, sh5]
- dep: perl-openssl-abi-3
- виртуальный пакет, предоставляемый perl-openssl-defaults
- dep: perlapi-5.34.0
- виртуальный пакет, предоставляемый perl-base
Загрузка libcrypt-openssl-rsa-perl
Архитектура | Размер пакета | В установленном виде | Файлы |
---|---|---|---|
alpha (неофициальный перенос) | 26,0 Кб | 114,0 Кб | [список файлов] |
amd64 | 26,9 Кб | 85,0 Кб | [список файлов] |
arm64 | 25,7 Кб | 113,0 Кб | [список файлов] |
armel | 25,3 Кб | 113,0 Кб | [список файлов] |
armhf | 25,4 Кб | 113,0 Кб | [список файлов] |
hppa (неофициальный перенос) | 26,6 Кб | 91,0 Кб | [список файлов] |
i386 | 28,3 Кб | 97,0 Кб | [список файлов] |
ia64 (неофициальный перенос) | 29,2 Кб | 128,0 Кб | [список файлов] |
m68k (неофициальный перенос) | 25,9 Кб | 81,0 Кб | [список файлов] |
mips64el | 24,1 Кб | 116,0 Кб | [список файлов] |
mipsel | 24,1 Кб | 115,0 Кб | |
ppc64 (неофициальный перенос) | 26,8 Кб | 177,0 Кб | [список файлов] |
ppc64el | 26,6 Кб | 177,0 Кб | [список файлов] |
riscv64 (неофициальный перенос) | 25,6 Кб | 78,0 Кб | [список файлов] |
s390x | 26,0 Кб | 89,0 Кб | [список файлов] |
sh5 (неофициальный перенос) | 27,2 Кб | 113,0 Кб | [список файлов] |
sparc64 (неофициальный перенос) | 24,9 Кб | 1 076,0 Кб | [список файлов] |
x32 | 26,6 Кб | 85,0 Кб | [список файлов] |
Использование OpenSSL: хеши, цифровые подписи и многое другое : Rebrain
Visitors have accessed this post 5612 times.
Перевод статьи — https://opensource.com/article/19/6/cryptography-basics-openssl-part-2
Детальный обзор шифрования в OpenSSL: хеши, цифровые подписи, цифровые сертификаты и многое другое
В первой статье из этой серии мы познакомились с хешами, шифрованием/дешифрованием, цифровыми подписями и сертификатами в библиотеках OpenSSL, утилитами командной строки. Во второй статье будет подробное изложение этого материала. Давайте начнем с хешей, которые широко используются в вычислениях, и рассмотрим, как создать криптографическую хеш-функцию.
Криптографические хеши
Страница загрузки исходного кода OpenSSL (https://www.openssl.org/source/) содержит таблицу с последними версиями. Каждая версия имеет два значения хеш-функции: 160-bit SHA1 и 256-bit SHA256. Эти значения можно использовать для проверки соответствия загруженного файла оригиналу в репозитории: загрузчик пересчитывает значения хеш-функции локально в загруженном файле, а затем сравнивает результаты с оригиналами. Современные системы уже имеют встроенные утилиты для вычисления подобных хешей. Операционная система Linux, например, имеет хеши
Хеши используются во многих областях вычислений. Например, блокчейн биткойнов использует хеш-значения SHA256 в качестве идентификаторов блоков. Чтобы майнить биткойн, необходимо сгенерировать хеш-значение SHA256, которое падает ниже заданного порога, то есть, хеш-значение как минимум с начальными нулями N. (Значение N может увеличиваться или уменьшаться в зависимости от того, насколько продуктивен майнинг в конкретное время). Интересно, что современные майнеры представляют собой аппаратные кластеры, предназначенные для параллельной генерации хешей SHA256. Во время пикового периода в 2018 году майнеры биткойнов по всему миру генерировали около 75 миллионов терахешей в секунду — еще одно непостижимое число.
Сетевые протоколы также используют хеш-значения — часто под именем контрольной суммы — для поддержки целостности сообщения; то есть, чтобы убедиться, что полученное сообщение совпадает с отправленным. Отправитель сообщения вычисляет контрольную сумму сообщения и отправляет результаты вместе с сообщением. Получатель пересчитывает контрольную сумму при получении сообщения. Если отправленная и пересчитанная контрольная сумма не совпадают, то что-то случилось с сообщением при передаче, либо с отправленной контрольной суммой, либо с обеими. В этом случае сообщение и его контрольную сумму следует отправить повторно или, по крайней мере, создать условие ошибки. (Сетевые протоколы низкого уровня, такие как UDP, не запариваются насчет контрольных сумм).
Другие примеры хешей более или менее известны. Рассмотрим веб-сайт, требующий от пользователей аутентификации с паролем, который пользователь вводит в своем браузере. Пароль затем отправляется в зашифрованном виде из браузера на сервер через HTTPS-соединение с сервером. Когда пароль поступает на сервер, он дешифруется для поиска в базе данных по таблице.
Что должно храниться в этой таблице поиска? Хранить одни пароли — рискованное дело.
Хеш-значения также встречаются в различных сферах безопасности. Например, код аутентификации сообщений на основе хеша (HMAC) использует значение хеш-функции и секретный криптографический ключ для аутентификации сообщения, отправленного по сети. Коды HMAC, которые так легки и просты в использовании в программах, популярны и в веб-сервисах. Цифровой сертификат X509 включает в себя значение хеш-функции, известное как
Какой особенностью должна обладать криптографическая хеш-функция
+---+ foobar—>|chf|—>хеш-значение ## прямолинейное +--–+
Для сравнения, обратная операция является невозможной:
+-----------+ хеш-значение—>|chf inverse|—>foobar ## труднорешаемое +-----------+
Вспомните, например, хеш-функцию SHA256. Для входной строки битов любой длины N> 0 эта функция генерирует хеш-значение фиксированной длины, равное 256 битам; следовательно, это значение хеша не показывает даже длину N входной строки битов, не говоря уже о значении каждого бита в строке. Кстати, SHA256 не подвержен атаке удлинением сообщения. Единственный эффективный способ обратного инжиниринга вычисленного значения хеш-функции SHA256 обратно во входную строку битов — это поиск методом последовательного перебора, то есть, перебор каждой возможной входной строки битов, пока не будет найдено совпадение с целевым значением хеш-функции. Такой поиск невозможен с использованием криптографической хеш-функции SHA256.
Теперь финальная точка обзора в порядке. Криптографические хеш-значения статистически, но не безусловно уникальны, а это означает, что две разные входные строки битов вряд ли, но возможно, выдают одно и то же хеш-значение — коллизию. Парадокс дней рождения представляет собой довольно противоречивый пример коллизий. Существует обширное исследование устойчивости к коллизиям различных хеш-алгоритмов. Например, MD5 (128-битные значения хеша) имеет разбивку в сопротивлении коллизии после примерно 221 хеша. Для SHA1 (160-битные значения хеша) разбивка начинается примерно с 261 хеша.
Пока что нет точной оценки пробоя в сопротивлении коллизии для SHA256. И это не удивительно. SHA256 имеет диапазон 2256 различных значений хеша, число, десятичное представление которого имеет 78 цифр! Бывают ли коллизии с хешированием SHA256? Конечно, но они крайне маловероятны.
В следующих примерах командной строки в качестве источников строк битов используются два входных файла: hashIn1.txt и hashIn2.txt. Первый файл содержит значения abc, а второй — 1a2b3c.
Для удобства чтения файл содержит текст, но вместо этого можно использовать двоичные файлы.
Используя утилиту Linux sha256sum для этих двух файлов в командной строке — со знаком процента (%) в качестве приглашения, можно создать следующие значения хеша (в шестнадцатеричной форме):
% sha256sum hashIn1.txt 9e83e05bbf9b5db17ac0deec3b7ce6cba983f6dc50531c7a919f28d5fb3696c3 hashIn1.txt % sha256sum hashIn2.txt 3eaac518777682bf4e8840dd012c0b104c2e16009083877675f00e995906ed13 hashIn2. txt
Как и ожидалось, хешированные аналоги OpenSSL дают те же результаты:
% openssl dgst -sha256 hashIn1.txt SHA256(hashIn1.txt)= 9e83e05bbf9b5db17ac0deec3b7ce6cba983f6dc50531c7a919f28d5fb3696c3 % openssl dgst -sha256 hashIn2.txt SHA256(hashIn2.txt)= 3eaac518777682bf4e8840dd012c0b104c2e16009083877675f00e995906ed13
Этот анализ криптографических хеш-функций позволяет более подробно рассмотреть цифровые подписи и их связь с парами ключей.
Цифровые подписи
Как следует из названия, цифровая подпись может быть прикреплена к документу или другому электронному артефакту (например, программе), чтобы подтвердить его подлинность. Такая подпись аналогична рукописной подписи на бумажном документе. Для проверки цифровой подписи нужно подтвердить две вещи. Во-первых, что проверенный артефакт не изменился с тех пор, как подпись была прикреплена, потому что он частично основан на криптографическом хеше документа. Во-вторых, что подпись принадлежит человеку (например, Алисе), единственному, кто имеет доступ к закрытому ключу в паре. Кстати, цифровая подпись кода (исходного или скомпилированного) — уже обычная практика среди программистов.
Давайте поэтапно разберем, как создается цифровая подпись. Как упоминалось ранее, цифровая подпись должна иметь пары открытого и закрытого ключей. При использовании OpenSSL для создания этих ключей существует две отдельные команды: одна для создания закрытого ключа, а другая для извлечения соответствующего открытого ключа из закрытого. Эти пары ключей кодируются в base64, и их размеры могут быть указаны во время этого процесса.
Закрытый ключ состоит из числовых значений, два из которых (модуль и показатель степени) составляют открытый ключ. Хотя файл закрытого ключа содержит открытый ключ, извлеченный открытый ключ не отображает значение соответствующего закрытого ключа.
Таким образом, полученный файл с закрытым ключом содержит полную пару ключей. Извлечение открытого ключа в его собственный файл является практичным, потому что оба ключа имеют различное использование, но это извлечение также сводит к минимуму риск того, что закрытый ключ может случайно появится в открытом доступе.
Затем закрытый ключ пары используется для обработки хеш-значения для целевого артефакта (например, электронной почты), создавая тем самым подпись. С другой стороны, система получателя использует открытый ключ пары для проверки подписи, прикрепленной к артефакту.
Теперь рассмотрим на примере. Для начала сгенерируем 2048-битную пару ключей RSA с OpenSSL:
openssl genpkey -out privkey.pem -algorithm rsa 2048
В этом примере мы можем убрать флаг -algorithm rsa, поскольку по умолчанию genpkey имеет тип RSA. Имя файла (privkey.pem) является произвольным, но расширение pem Privacy Enhanced Mail (PEM) является стандартным для формата PEM по умолчанию. (Если необходимо, в OpenSSL есть команды для преобразования между форматами. ) Если требуется больший размер ключа (например, 4096), то последний аргумент 2048 можно изменить на 4096. Эти размеры всегда имеют степень двойки.
Вот фрагмент получившегося файла privkey.pem, который находится в base64:
-----BEGIN PRIVATE KEY----- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANnlAh5jSKgcNj/Z JF4J4WdhkljP2R+TXVGuKVRtPkGAiLWE4BDbgsyKVLfs2EdjKL1U+/qtfhYsqhkK … -----END PRIVATE KEY-----
Следующая команда затем извлекает открытый ключ пары из закрытого:
openssl rsa -in privkey.pem -outform PEM -pubout -out pubkey.pem
Полученный файл pubkey.pem небольшой, поэтому его можно отобразить в полном виде:
-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZ5QIeI0ioHDY/2SReCeFnYZJY z9kfk11RrilUbT5BgIi1hOAQ24LMilS37NhHYyi9VPv6rX4WLKoZCmkeYaWk/TR5 4nbh2E/AkniwRoXpeh5VncwWMuMsL5qPWGY8fuuTE27GhwqBiKQGBOmU+MYlZonO O0xnAKpAvysMy7G7qQIDAQAB -----END PUBLIC KEY-----
Теперь, имея под рукой пару ключей, цифровую подпись создать очень просто. В данном случае, исходный файл client.c выступает в качестве артефакта, который необходимо подписать:
openssl dgst -sha256 -sign privkey.pem -out sign.sha256 client.c
Дайджестом для исходного файла client.c является хеш-функция SHA256, а закрытый ключ находится в ранее созданном файле privkey.pem. Полученный файл двоичной подписи — это sign.sha256, то есть, произвольное имя. Чтобы получить читабельную (с помощью base64) версию этого файла, выполните следующую команду:
openssl enc -base64 -in sign.sha256 -out sign.sha256.base64
Файл sign.sha256.base64 теперь содержит:
h+e+3UPx++KKSlWKIk34fQ1g91XKHOGFRmjc0ZHPEyyjP6/lJ05SfjpAJxAPm075 VNfFwysvqRGmL0jkp/TTdwnDTwt756Ej4X3OwAVeYM7i5DCcjVsQf5+h7JycHKlM o/Jd3kUIWUkZ8+Lk0ZwzNzhKJu6LM5KWtL+MhJ2DpVc=
Или же, вместо этого, можно подписать исполняемый файл-клиент, но при этом, полученная подпись в кодировке base64 естественно будет отличаться:
VMVImPgVLKHxVBapJ8DgLNJUKb98GbXgehRPD8o0ImADhLqlEKVy0HKRm/51m9IX xRAN7DoL4Q3uuVmWWi749Vampong/uT5qjgVNTnRt9jON112fzchgEoMb8CHNsCT XIMdyaPtnJZdLALw6rwMM55MoLamSc6M/MV1OrJnk/g=
Заключительный этап в этом процессе — это проверка цифровой подписи с открытым ключом. Хеш, используемый для подписи артефакта (в данном случае исполняемой программой-клиентом), должен быть пересчитан как важный этап проверки, поскольку процесс проверки должен указывать, изменился ли артефакт с момента подписания.
Для этого используются две команды OpenSSL. Первый расшифровывает подпись base64:
openssl enc -base64 -d -in sign.sha256.base64 -out sign.sha256
Второй проверяет подпись:
openssl dgst -sha256 -verify pubkey.pem -signature sign.sha256 client
Вывод второй команды должен показать результат:
Verified OK
Чтобы понять, что происходит при сбое проверки, существует краткое, но полезное упражнение, суть которого заменить исполняемый файл клиента в последней команде OpenSSL исходным файлом client.c, а затем выполнить проверку. Другое упражнение состоит в том, чтобы немного изменить программу-клиент и повторить попытку.
Цифровые сертификаты
Цифровой сертификат объединяет фрагменты, проанализированные до настоящего момента: хеш-значения, пары ключей, цифровые подписи и шифрование/дешифрование. Первым этапом на пути к получению сертификата производственного уровня является создание запроса на подпись сертификата (CSR), который затем отправляется в центр сертификации (CA). Чтобы сделать это с помощью OpenSSL, запустите:
openssl req -out myserver.csr -new -newkey rsa:4096 -nodes -keyout myserverkey.pem
В этом примере создается документ CSR и сохраняется документ в файле myserver.csr (текст base64). Для чего это нужно: документ CSR отправляет запрос, чтобы ценрт сертификации поручился за его идентичность с указанным доменным именем — общим именем (CN) в CA.
Новая пара ключей также генерируется этой командой, хотя можно использовать уже существующую пару. Обратите внимание, что использование сервера в именах myserver.csr и myserverkey. pem, указывает на типичное использование цифровых сертификатов: в качестве поручителей идентификации веб-сервера, связанного с доменом как, например, www.google.com.
Однако эта же команда создает CSR независимо от способа использования цифрового сертификата. Она точно также запускает интерактивный сеанс вопросов/ответов, который запрашивает соответствующую информацию о доменном имени для связи с цифровым сертификатом запрашивающей стороны. Этот интерактивный сеанс может прерваться путем предоставления основ в рамках команды с обратными слешами в качестве продолжения через разрывы строк. Флаг -subj вводит необходимую информацию:
% openssl req -new -newkey rsa:2048 -nodes -keyout privkeyDC.pem -out myserver.csr -subj "/C=US/ST=Illinois/L=Chicago/O=Faulty Consulting/OU=IT/CN=myserver.com"
Полученный документ CSR может быть проверен перед отправкой в CA. Этот процесс создает цифровой сертификат с желаемым форматом (например, X509), подписью, датами действия и т. д.
openssl req -text -in myserver.csr -noout -verify
Вот фрагмент вывода:
verify OK Certificate Request: Data: Version: 0 (0x0) Subject: C=US, ST=Illinois, L=Chicago, O=Faulty Consulting, OU=IT, CN=myserver.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ba:36:fb:57:17:65:bc:40:30:96:1b:6e:de:73: … Exponent: 65537 (0x10001) Attributes: a0:00 Signature Algorithm: sha256WithRSAEncryption …
Самостоятельно сгенерированный сертификат
При разработке веб-сайта с HTTPS протоколом желательно иметь цифровой сертификат под рукой, не проходя процесс сертификации. Самостоятельно сгенерированный сертификат заполняет счет на этапе аутентификации HTTPS, хотя любой современный браузер предупреждает, что такой сертификат не нужен. Продолжая пример, ниже приводится команда OpenSSL для самостоятельно сгенерированного сертификата, действительного в течение года и с открытым ключом RSA:
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:4096 -keyout myserver.pem -out myserver.crt
Ниже приводится читабельная версия сгенерированного сертификата через команду OpenSSL:
openssl x509 -in myserver.crt -text -noout
Вот фрагмент вывода самостоятельно сгенерированного сертификата:
Certificate: Data: Version: 3 (0x2) Serial Number: 13951598013130016090 (0xc19e087965a9055a) Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=Illinois, L=Chicago, O=Faulty Consulting, OU=IT, CN=myserver.com Validity Not Before: Apr 11 17:22:18 2019 GMT Not After : Apr 10 17:22:18 2020 GMT Subject: C=US, ST=Illinois, L=Chicago, O=Faulty Consulting, OU=IT, CN=myserver. com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:ba:36:fb:57:17:65:bc:40:30:96:1b:6e:de:73: … Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 3A:32:EF:3D:EB:DF:65:E5:A8:96:D7:D7:16:2C:1B:29:AF:46:C4:91 X509v3 Authority Key Identifier: keyid:3A:32:EF:3D:EB:DF:65:E5:A8:96:D7:D7:16:2C:1B:29:AF:46:C4:91 X509v3 Basic Constraints: CA:TRUE Signature Algorithm: sha256WithRSAEncryption 3a:eb:8d:09:53:3b:5c:2e:48:ed:14:ce:f9:20:01:4e:90:c9: …
Как упоминалось ранее, закрытый ключ RSA содержит значения, по которым генерируется открытый ключ. Однако, открытый ключ не выдает соответствующий закрытый ключ.
Существует важное соответствие между цифровым сертификатом и парой ключей, используемой для создания сертификата, даже если сертификат самостоятельно сгенерирован:
- Цифровой сертификат содержит показатели степени и модуля, которые составляют открытый ключ. Эти значения являются частью пары ключей в первоначально сгенерированном файле PEM, в данном случае в файле myserver.pem.
- Показатель степени почти всегда равен 65 537 (как в этом случае), и поэтому его можно игнорировать.
- Модуль из пары ключей должен совпадать с модулем из цифрового сертификата.
Модуль — это большое значение, которое может быть хешировано для удобства прочтения. Ниже приведены две команды OpenSSL, которые проверяют один и тот же модуль, тем самым подтверждая, что цифровой сертификат основан на паре ключей в файле PEM:
Certificate: Data: Version: 3 (0x2) Serial Number: 13951598013130016090 (0xc19e087965a9055a) Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=Illinois, L=Chicago, O=Faulty Consulting, OU=IT, CN=myserver.com Validity Not Before: Apr 11 17:22:18 2019 GMT Not After : Apr 10 17:22:18 2020 GMT Subject: C=US, ST=Illinois, L=Chicago, O=Faulty Consulting, OU=IT, CN=myserver. com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:ba:36:fb:57:17:65:bc:40:30:96:1b:6e:de:73: … Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 3A:32:EF:3D:EB:DF:65:E5:A8:96:D7:D7:16:2C:1B:29:AF:46:C4:91 X509v3 Authority Key Identifier: keyid:3A:32:EF:3D:EB:DF:65:E5:A8:96:D7:D7:16:2C:1B:29:AF:46:C4:91 X509v3 Basic Constraints: CA:TRUE Signature Algorithm: sha256WithRSAEncryption 3a:eb:8d:09:53:3b:5c:2e:48:ed:14:ce:f9:20:01:4e:90:c9: …
Полученные значения хеш-функции совпадают, подтверждая тем самым, что цифровой сертификат основан на указанной паре ключей.
Возвращаемся к вопросу распространения ключей
Давайте вернемся к вопросу, затронутому в конце 1 статьи: согласование TLS между программой-клиентом и веб-сервером Google. Существуют различные протоколы согласования, и даже версия протокола Диффи-Хеллмана в работе на примере клиента предлагает возможность для различных манипуляций. Тем не менее, пример клиента следует общему шаблону.Для начала во время согласования TLS, программа-клиент и веб-сервер согласовывают набор шифров, который состоит из используемых алгоритмов. В данном случае, набор включает: ECDHE-RSA-AES128-GCM-SHA256.Сейчас нас интересуют два элемента: алгоритм пары ключей RSA и блочный шифр AES128, используемый для шифрования и дешифрования сообщений в случае успешного установления связи. Что касается шифрования/дешифрования, этот процесс имеет два варианта: симметричный и асимметричный. В симметричном варианте один и тот же ключ используется для шифрования и дешифрования, что в первую очередь поднимает вопрос распространения ключей: как безопасно распространять ключ для обеих сторон? В асимметричном варианте один ключ используется для шифрования (в данном случае открытый ключ RSA), а другой ключ используется для расшифровывания (в данном случае закрытый ключ RSA из той же пары). Программа-клиент имеет открытый ключ веб-сервера Google из сертификата аутентификации, а веб-сервер имеет закрытый ключ из той же пары. Соответственно, программа-клиент может отправлять зашифрованное сообщение на веб-сервер, который сам по себе может легко расшифровать это сообщение.В ситуации с протоколом TLS, симметричный подход имеет два существенных преимущества:
- Во взаимодействии между программой-клиентом и веб-сервером Google аутентификация является односторонней. Веб-сервер Google отправляет три сертификата программе-клиенту, но сама она не отправляет сертификат веб-серверу; следовательно, веб-сервер не имеет открытого ключа от клиента и не может зашифровать сообщения для клиента.
- Симметричное шифрование/дешифрование с помощью AES128 почти в тысячу раз быстрее, чем асимметричное с использованием ключей RSA.
Согласование TLS разумно сочетает в себе два вида шифрования/дешифрования. Во время согласования, программа-клиент генерирует случайные биты, называемые секретом (pre-master secret (PMS)). Затем программа-клиент шифрует PMS с помощью открытого ключа сервера и отправляет зашифрованный PMS на сервер, который, в свою очередь, дешифрует сообщение PMS своим закрытым ключом из пары RSA:
+-------------------+ зашифрованныйPMS +--------------------+ клиент PMS--->|открытый ключ сервера|--------------->|закрытый ключ сервера|---> сервер PMS +-------------------+ +--------------------+
В конце этого процесса, программа-клиент и веб-сервер Google теперь имеют одинаковые биты PMS. Каждая сторона использует эти биты для генерации секрета, а затем и симметричного ключа шифрования/дешифрования, известного как сеансовый ключ. Теперь есть два разных, но идентичных сеансовых ключа, по одному на каждой стороне соединения. В примере клиента, сеансовый ключ относится к разновидности AES128. Сгенерированный как на стороне программы-клиента, так и на стороне веб-сервера Google, сеансовый ключ на каждой стороне сохраняет конфиденциальность диалога между двумя сторонами. Например, протокол согласования Диффи-Хеллмана позволяет повторять весь процесс PMS, если одна из сторон (например, программа-клиент) или другая (в данном случае веб-сервер Google) требует перезапуск согласования.
ЗаключениеОперации OpenSSL, показанные в командной строке, также доступны через API для базовых библиотек. В этих двух статьях выделены утилиты, позволяющие сделать примеры короткими и сосредоточиться на темах криптографии. Если вы интересуетесь вопросами безопасности, OpenSSL — это отличная стартовая площадка.
От редакции
Если вам интересно посещать бесплатные онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN.
*Анонсы мероприятий каждую неделю
Практикумы для специалистов по инфраструктуре и разработчиков — https://rebrainme.com.
Наш Youtube-канал — https://www.youtube. com/channel/UC6uIx64IFKMVmj12gKtSgBQ.
Агентство Fevlake, проектируем и поддерживаем IT-инфраструктуры с 2012 года — https://fevlake.com.
Что такое зашифрованный формат RSA PEM из OpenSSL `genrsa`? [rsa, openssl, private-key, pem]
У меня есть несколько зашифрованных закрытых ключей и парольных фраз, которые я хотел бы загрузить в .NET без OpenSSL, но мне не удается найти для них формат и спецификацию.
Я могу анализировать и декодировать двоичные данные из PEM, и изначально я думал, что получу PKCS # 8, но, похоже, это не так.
Команда OpenSSL для их создания такая, как openssl genrsa -des3 -out test.key 2048
, в результате получается такой файл:
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,7EF293A7B0C43A20 bwz7TPBN2Xr6AxW9y7PRkaQjXYOS3bireDgyD0lBfKMqQ9AV2oTNUcrI2MtaquBH QaK+bZY0XBpviceXPrfl73cFrBLBZM7/QhyxINWvcuJiq/hyHFwkT/kEOPWg3g+B 6hIKnMiKcObrU2BVHzt9kuiAneRZob9KwohvIHKpD15y0b0Gm8djBTXBAMgDbyIR vvQvOrWcyTGLhZs+xq07Bv+tpl9ben8RJcOLVb/xBiaoucvUA/jzyT4BcaZmeeNZ +tSR8B4R0/AWvK5nTpHtDA/5VKWdrGy5HZPNqLOzKO9IMY6xbFrNnPs9/EwufZsi USLQ/U5/4qdJ/uOMuOuzb0IHTbwMYfsi66Dv0tnCkp6Fmd0ZIGSQvXESQebCbSuJ mSc3XgpbWK9C0WqHt5jwYs6Ta3TTwXw8aeDWAcyyHCfvcQRUoWWPEverqrZ6u9Ub Q6+50qkrHqK0JLTclVj5ty1doWRmcu9tyKRpzQuULo9MPkJDYAxrzzbOzMEXrOVM oKgK/lJSjFx2dHkyTA4Puuu8jyAj99tyhuVCr8G13voB3RdgglKuyAtIamaI8gPU n13ysFtZv60oWbmP3obeRw3GJvuLkBUOkEGXxCaEmqHhSfA20bnXLPO5iGVHLoiI Uiv0G+9+726A4GIGJBxVq0I1mt9IMXpqopiyuz22v4dKDJ5MHmtqyt3RalRfki6B yJh51O46duyKedaWK94P9ZOpVdUcxsPMzJ9UmPW+L/r+N/tQlP54deK86Pq73LrS 9UIQ8A2QMylU0BvpXNLg5w08C3mAzKA4h+QBUL0RMe6JCk1wipKzDJ7oeNh0r/EN JgMAi1Fxra1PjvPRNG7iYBSiyYoO75W8BIBPW0py6v72mzWQ8Dx9kcH+Xdr5vWfW aagBTwv17zpfcLtuhmT6FVSg0A1iIQHM6TDjhRq+cJxh5ioaLZNHFxCXNhGa5c2g E4KOtZPdnCubNinCdzZn0B5KNgKkCVSlm4o6bRrfdqrBLzBBlTTA3mkJgxQYbDzW W6ET5LZTbJkozSi2nRehyLvLV/FUlIKneyRqQdLFksH82/3R+CW0jsGei+qB8XMY 9ssfQ7ccsvzfCHlss/g/v3uKCwOhTZ3yzo2IA16w4hftlw7IwT4jfOF73CRYILg+ C8Iw2+VMGZmEgDdwJt3TdSB95MDY/WJGwCR7fiat1oMP/uhGqhNyuswnZTq/gWMH rDJfELbv8HAQfYuh3I3/HDmwjyUi8FkWPpbKhcOHQB8pk3zZTERk3NtV6iAYSG+V rxEIj3yB3zjn5+9QFOEAU6edqigeM1UKdH5jUUc3hi+C4evzR1xbomDp3JQyw0PB Jlj2tFMhDhj4thmltBKs1ZwUAd7ei7gvgvQq2vJB1zmwxHS/8g83lryOUHU9zQTF 8SObmYEEmUzy7I5CgvKcePQkRqeZD4x4nsf3Q09NvljrXaWGJjLH+Xjzg3h7fR5b GvrX7EyyEdFwf3z1tcA/VcFnIQptLTDcjlpxou16WaM1F/OVQ/OGNJnG1xHbVwTv cDNbpyoP5xERAYSp2YpFTVGJG43tcdDhLjZMN7WGHIb4Qc5Gm1JabxPtys2YnLhB -----END RSA PRIVATE KEY-----
Насколько я могу судить, данные в кодировке base64 недействительны DER / ASN, инструменты, которые я нашел, просто говорят, что данные недействительны, включая openssl asn1parse -inform PEM
. . Я предполагаю, что эти два «заголовка» являются отличительной чертой, но каков формат? Какие общие ценности?
RFC 1421, похоже, называет такие заголовки «инкапсулированным заголовком», иначе я их не нашел.
rsa openssl private-key pem
person Fire Lancer schedule 18.11.2019 source источник
Ответы (1)
arrow_upward
3
arrow_downward
Это файл закрытого ключа традиционного или устаревшего формата OpenSSL (или один из нескольких, в зависимости от того, как вы считаете). Он задокументирован на странице руководства в вашей системе или в Интернете, для связанных процедур — номинально man 3 PEM_{read,write}{,_bio}_{RSA,DSA,EC}PrivateKey
, хотя эта страница дублируется или содержит символические ссылки под многочисленными именами — в разделе «ФОРМАТ ШИФРОВАНИЯ PEM». Вкратце, данные шифруются (с выбранным симметричным алгоритмом, в этом примере DES3, также известный как DESede, также известный как тройной DES, с CBC и IV) с использованием ключа, полученного из пароля (с солью, равной IV или его частью, необычно, и всего одна итерация, слабая). Используемая функция получения ключа на основе пароля, EVP_BytesToKey
, имеет свою собственную страницу руководства.
Это не PKCS8. В дополнение к тому, что они зашифрованы иначе, чем зашифрованные PKCS8 (формально EncryptedPrivateKeyInfo
), чистые данные, которые вы получаете после дешифрования (или если вы не зашифровали с самого начала, например genrsa
без -$cipher
), не являются PKCS8 -чисто PrivateKeyInfo
. Вместо этого это формат данных, зависящий от алгоритма; для RSA это формат, определенный в PKCS1, приложение A.1.2, а для DSA и EC у него есть другие форматы, которые здесь не актуальны.
OpenSSL также поддерживает файлы закрытого ключа PKCS8, как незашифрованные, так и зашифрованные, которые имеют разные типы PEM: BEGIN/END PRIVATE KEY
и BEGIN/END ENCRYPTED PRIVATE KEY
, но не BEGIN/END {RSA,DSA,EC} PRIVATE KEY
. Информацию об API см. На той же странице руководства. Вы можете конвертировать в командной строке с помощью
openssl pkcs8 -topk8 <tradfile >pk8file [-nocrypt | -v1 pbcipher | -v2 plaincipher]` # since 1.0.0 in 2010 you can add -iter N # or since 1.0.0 simply openssl pkey <tradfile >pk8file [-$cipher]
PKCS8 является более стандартным (и взаимозаменяемым) и более безопасным, поэтому рекомендуется — как говорится на той же странице руководства в непосредственно предшествующем разделе ПРИМЕЧАНИЯ.
Java-версия BouncyCastle поддерживает форматы OpenSSL PEM в bcpkix
. Я не знаю версию для dotnet, но, возможно, ее стоит поискать.
Если нет или вы не можете его использовать, вы можете преобразовать (расшифрованный) формат PKCS1 в PKCS8, добавив в основном фиксированный заголовок; в терминах ASN.1 PKCS8 — это оболочка, которая содержит некоторые метаданные плюс СТРОКУ ОКТЕТОВ, содержащую для RSA кодировку PKCS1. У меня нет решения dotnet для этого, но вы, вероятно, можете адаптироваться с Java, используя мой список ссылок на Ошибка синтаксического анализа Algid, а не последовательность и, возможно, Преобразование строкового закрытого ключа в тип PrivateKey.
person dave_thompson_085 schedule 18.11.2019
/docs/man1.1.1/man1/openssl-rsa.html
Имя
Openssl -RSA, RSA -инструмент обработки ключей RSA
Синопсис
OpenSSL RSA [-Help ] openssl RSA [9000 -HHELP ]. сообщить PEM|DER ] [ -outform PEM|DER ] [ -входящее имя файла ] [ -passin arg ] [ -исходящее имя файла ] [ -passout arg ] [ -aes1208] 9012 -aes192 ] [ -aes256 ] [ -aria128 ] [ -aria192 ] [ -ARIA256 ] [ -Camellia128 ] [ -Camellia192 ] [ -Camellia256 ] [ -DES ] [ -DES3 ] [ -IDEA ] [-Tlect 10101010101011011011011091010110910910910110 гг. ] [ -NOOUT ] [ -Modulus ] [ -Check ] [ -Pubin ] [ -Pubout ] [ -Rsapublickey_in ] [ -Rsapubly_out ] [ -Engine ID ].
ОПИСАНИЕ
Команда rsa обрабатывает ключи RSA. Их можно преобразовывать между различными формами и распечатывать их компоненты. Примечание эта команда использует традиционный формат, совместимый с SSLeay, для шифрования с закрытым ключом: новые приложения должны использовать более безопасный формат PKCS#8 с помощью утилиты pkcs8 .
ОПЦИИ
- -помощь
Распечатать сообщение об использовании.
- -Информ ДЕР|ПЭМ
Указывает формат ввода. Параметр DER использует закодированную форму ASN1 DER, совместимую с форматом PKCS#1 RSAPrivateKey или SubjectPublicKeyInfo. 9Форма 0009 PEM является форматом по умолчанию: она состоит из формата DER base64, закодированного с дополнительными строками заголовка и нижнего колонтитула. При вводе также принимаются закрытые ключи формата PKCS#8.
- — внешний DER|PEM
Указывает выходной формат, параметры имеют то же значение и значение по умолчанию, что и параметр -inform .
- -в имени файла
Указывает имя входного файла для чтения ключа или стандартный ввод, если этот параметр не указан. Если ключ зашифрован, будет запрошена парольная фраза.
- -пароль аргумент
Источник пароля входного файла. Дополнительные сведения о формате arg см. в разделе «Параметры парольной фразы» в openssl(1).
- — имя файла
Указывает имя выходного файла для записи ключа или стандартного вывода, если этот параметр не указан. Если установлены какие-либо параметры шифрования, будет запрошена парольная фраза. Имя выходного файла должно быть , а не , совпадать с именем входного файла.
- — пароль доступа
Источник пароля выходного файла. Дополнительные сведения о формате arg см. в разделе «Параметры парольной фразы» в openssl(1).
- -aes128 , -aes192 , -aes256 , -aria128 , -aria192 , -aria256 , -camellia128 , -camellia192 , -camellia256 , -des , -des3 , -идея
Эти параметры шифруют закрытый ключ с помощью указанного шифра перед его выводом. Запрашивается парольная фраза. Если ни один из этих параметров не указан, ключ записывается в виде обычного текста. Это означает, что использование утилиты rsa для чтения зашифрованного ключа без опции шифрования можно использовать для удаления фразы-пароля из ключа или путем установки параметров шифрования, которые можно использовать для добавления или изменения фразы-пароля. Эти параметры можно использовать только с выходными файлами формата PEM.
- -текст
Распечатывает различные компоненты открытого или закрытого ключа в виде простого текста в дополнение к закодированной версии.
- -ноут
Эта опция запрещает вывод закодированной версии ключа.
- -модуль
Эта опция выводит значение модуля ключа.
- -чек
Этот параметр проверяет согласованность закрытого ключа RSA.
- -паб
По умолчанию из входного файла считывается закрытый ключ: с этой опцией вместо него читается открытый ключ.
- -пабаут
По умолчанию выводится закрытый ключ: с этой опцией вместо него будет выведен открытый ключ. Этот параметр устанавливается автоматически, если ввод является открытым ключом.
- -RSAPublicKey_in , -RSAPublicKey_out
Нравится -pubin и -pubout кроме Вместо этого используется формат RSAPublicKey .
- -идентификатор двигателя
Указание механизма (по его уникальной строке id ) приведет к тому, что rsa попытается получить функциональную ссылку на указанный механизм, тем самым при необходимости инициализируя его. Затем этот движок будет установлен по умолчанию для всех доступных алгоритмов.
ПРИМЕЧАНИЯ
Формат закрытого ключа PEM использует строки верхнего и нижнего колонтитула:
-----НАЧАЛО ЗАКРЫТОГО КЛЮЧА RSA----- -----END RSA PRIVATE KEY-----
Формат открытого ключа PEM использует строки заголовка и нижнего колонтитула:
-----BEGIN PUBLIC KEY----- -----END PUBLIC KEY-----
Формат PEM RSAPublicKey использует строки заголовка и нижнего колонтитула:
-----BEGIN RSA PUBLIC KEY----- -----КОНЕЦ ОТКРЫТОГО КЛЮЧА RSA-----
ПРИМЕРЫ
Чтобы удалить фразу-пароль для закрытого ключа RSA:
openssl rsa -in key. pem -out keyout.pem
Чтобы зашифровать закрытый ключ с помощью тройного DES:
openssl rsa -in key.pem -des3 -out keyout.pem
Чтобы преобразовать закрытый ключ из формата PEM в формат DER:
openssl rsa -in key.pem - outform DER -out keyout.der
Чтобы вывести компоненты закрытого ключа в стандартный вывод:
openssl rsa -in key.pem -text -noout
Чтобы просто вывести открытую часть закрытого ключа:
openssl rsa -in key.pem -pubout -out pubkey.pem
Вывести открытую часть закрытого ключа в формате RSAPublicKey :
openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
ОШИБКИ
вручную редактировать их.
СМОТРИТЕ ТАКЖЕ
pkcs8(1), dsa(1), genrsa(1), gendsa(1)
АВТОРСКОЕ ПРАВО
Copyright 2000-2021 Авторы проекта OpenSSL. Все права защищены.
Под лицензией OpenSSL («Лицензия»). Вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Вы можете получить копию в файле LICENSE в исходном дистрибутиве или по адресу https://www.openssl.org/source/license.html.
/docs/man3.0/man1/openssl-rsa.html
Имя
OPENSSL -RSA -Команда обработки ключей RSA
Синопсис
[110 RSA [ -Help ] ДЕР | ПЕМ | Р12 | ДВИГАТЕЛЬ ] [-outform DER | PEM ] [ -in имя файла | uri ] [ -passin arg ] [ -out Имя файла ] [ -Passout ARG ] [ -AES128 ] [ -AES192 ] [ -AES256 ] [ -ARIA128 ] [ -ARIA19291010] -Camellia128 ] [ -Camellia192 ] [ -Camellia256 ] [ -DES ] [ -DES3 ] [ -IDEA ] [ -Text ] [ -NOOUT ] [— ]. модуль ] [ -традиционный ] [ -check ] [ -pubin ] [ -pubout ] [ -RSAPublicKey_in ] [ -RSAPublicKey_out ] [ -pvk-strong ] [ -pvk-weak ] [ -pvk-none ] [ -engine id ] [ -provider имя ] [ -provider-path путь ] [ -propquery propq ]
3 ключей Эта команда обрабатывает 3 ключей. Их можно преобразовывать между различными формами и распечатывать их компоненты.ОПЦИИ
- -помощь
Распечатать сообщение об использовании.
- -Информ ДЕР | ПЕМ | Р12 | ДВИГАТЕЛЬ
Ключевой формат ввода; по умолчанию не указано. См. подробности в openssl-format-options(1).
- -outform DER | ПЕМ
Ключевой формат вывода; по умолчанию PEM . См. подробности в openssl-format-options(1).
- — традиционный
При записи закрытого ключа используйте традиционный формат PKCS#1 вместо формата PKCS#8.
- -in имя файла | ури
Указывает ввод для чтения ключа или стандартный ввод, если этот параметр не указан. Если ключ зашифрован, будет запрошена парольная фраза.
- -пропуск аргумент , -пропуск аргумент
Источник пароля для входного и выходного файла. Для получения дополнительной информации о формате arg см. openssl-passphrase-options(1).
- -выход имя файла
Указывает имя выходного файла для записи ключа или стандартного вывода, если этот параметр не указан. Если установлены какие-либо параметры шифрования, будет запрошена парольная фраза. Имя выходного файла должно быть , а не , совпадать с именем входного файла.
- -aes128 , -aes192 , -aes256 , -aria128 , -aria192 , -aria256 , -camellia128 , -camellia192 , -camellia256 , -des , -des3 , -идея
Эти параметры шифруют закрытый ключ с помощью указанного шифра перед его выводом. Запрашивается парольная фраза. Если ни один из этих параметров не указан, ключ записывается в виде обычного текста. Это означает, что эту команду можно использовать для удаления фразы-пароля из ключа, не указывая никаких параметров шифрования, или для добавления или изменения фразы-пароля путем их установки. Эти параметры можно использовать только с выходными файлами формата PEM.
- -текст
Распечатывает различные компоненты открытого или закрытого ключа в виде простого текста в дополнение к закодированной версии.
- -ноут
Эта опция запрещает вывод закодированной версии ключа.
- -модуль
Эта опция выводит значение модуля ключа.
- -чек
Этот параметр проверяет согласованность закрытого ключа RSA.
- -паб
По умолчанию из входного файла считывается закрытый ключ: с этой опцией вместо него читается открытый ключ.
- -пабаут
По умолчанию выводится закрытый ключ: с этой опцией вместо него будет выведен открытый ключ. Этот параметр устанавливается автоматически, если ввод является открытым ключом.
- -RSAPublicKey_in , -RSAPublicKey_out
Нравится -pubin и -pubout кроме Вместо этого используется формат RSAPublicKey .
- -ПВК-сильный
Включить «Сильный» уровень кодирования PVK (по умолчанию).
- -ПВК-слабый
Включить «Слабый» уровень кодирования PVK.
- -ПВК-нет
Не применять кодировку PVK.
- -двигатель ID
См. «Параметры движка» в openssl(1). Эта опция устарела.
- -поставщик имя
- -провайдер-путь путь
- -propquery propq
См. «Параметры поставщика» в openssl(1), provider(7) и property(7).
ПРИМЕЧАНИЯ
Команда openssl-pkey(1) способна выполнять все операции, которые может выполнять эта команда, а также поддерживает другие типы открытых ключей.
ПРИМЕРЫ
Документация по команде openssl-pkey(1) содержит примеры, эквивалентные перечисленным здесь.
Чтобы удалить парольную фразу из закрытого ключа RSA:
openssl rsa -in key. pem -out keyout.pem
Чтобы зашифровать закрытый ключ с помощью тройного DES:
openssl rsa -in key.pem -des3 - out keyout.pem
Чтобы преобразовать закрытый ключ из формата PEM в формат DER:
openssl rsa -in key.pem -outform DER -out keyout.der
Чтобы распечатать компоненты закрытого ключа в стандартный вывод:
openssl rsa -in key.pem -text -noout
Чтобы просто вывести открытую часть закрытого ключа:
openssl rsa -in key.pem -pubout -out pubkey.pem
Вывести открытую часть закрытый ключ в формате RSAPublicKey :
openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
ОШИБКИ
Должна быть опция, которая автоматически обрабатывает файлы .key без необходимости их редактирования вручную.
СМОТРИТЕ ТАКЖЕ
openssl(1), openssl-pkey(1), openssl-pkcs8(1), openssl-dsa(1), openssl-genrsa(1), openssl-gendsa(1)
ИСТОРИЯ
Двигатель Опция устарела в OpenSSL 3. 0.
АВТОРСКИЕ ПРАВА
Copyright 2000-2021 Авторы проекта OpenSSL. Все права защищены.
Под лицензией Apache License 2.0 («Лицензия»). Вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Вы можете получить копию в файле LICENSE в исходном дистрибутиве или по адресу https://www.openssl.org/source/license.html.
Создание ключей RSA с использованием OpenSSL
Создание закрытого ключа для подписи токена не должно быть загадкой. Недавно я писал об использовании OpenSSL для создания ключей, подходящих для криптографии на эллиптических кривых (ECC), и в этой статье я собираюсь показать вам, как сделать то же самое для закрытых и открытых ключей RSA, подходящих для генерации подписи с помощью RSASSA-PKCS1. -v1_5 и РСАССА-ПСС.
tl;dr — OpenSSL RSA Cheat Sheet
# сгенерировать закрытый ключ правильной длины openssl genrsa -out private-key.pem 3072 # сгенерировать соответствующий открытый ключ openssl rsa -in private-key. pem -pubout -out public-key.pem # необязательно: создайте самозаверяющий сертификат запрос openssl -новый -x509-key private-key.pem -out cert.pem -days 360 # необязательно: преобразовать pem в pfx openssl pkcs12 -export -inkey private-key.pem -in cert.pem -out cert.pfx
Генерация закрытого ключа RSA с использованием OpenSSL
Вы можете сгенерировать закрытый ключ RSA с помощью следующей команды:
openssl genrsa -out private-key.pem 3072
В этом примере я использовал ключ длиной 3072 бита. Хотя 2048 — это минимальная длина ключа, поддерживаемая такими спецификациями, как JOSE, рекомендуется использовать 3072. Это дает вам 128-битную безопасность. Эта команда также использует показатель степени 65537, который вы, вероятно, видели сериализованным как «AQAB».
Это дает вам файл PEM, содержащий ваш закрытый ключ RSA, который должен выглядеть примерно так:
-----НАЧАЛО ЗАКРЫТОГО КЛЮЧА RSA----- MIIG4wIBAAKCAYEA1MSdsaPh3ShtjOo4c02+DbYcTdwUBLY+vNSXr2tV8/jGU059 Jak9CA7VSlKR/fik18D7Lq1beLjW56kV4Xvm3qmpxOc3eNGmj8dqtO0G3Lp1FAZz xlu2SZsHmmVq9isZcN70apkwlDgIZ11NVIq/1iXzr0pIRMKkMNHTGBGBkYOrIcgd h3elvIqfiit6Gts/zho4YCjgyn/r3Vgy/jCu6VbfwE9xVY/DB4srD5LrZMabRzN2 YwSTI+sRqpbt7I7nZ6o8CuyqHDLjbO9VzE0povBshTfoyog9XGcQHwTmWn4bdnsh 2I1x3gQpaqxdRs4vnKmXJ9GvC/sYla0GYXyDecpgjITqx3QA6aKx9+EVh/o6owYT HXaToVkP7U5m8cqaloQFfA8HLsGDg9A0QaMtixnX7KtT/ZvKFMcazRJ1GX42Uaeu O1opZKtjBHLtmaPadNeZdD77VytwY2UHeW5QSnfpos7IxUTATpd6KTWUV3snVQny iltCI1BHJC01sWePAgMBAAECggGAEG1tz31ZvMaGTs72tNBX0C8zWD+ZvBNmHKY9 X+nlpQScK2pv9yxt7eVXSnm9k+JSt+XKfvwbh+KdlR1U9yfd12s6FF3VxppJReib sIRsdzZeO8GTxsjl9iDmIWGbNI53VGOic2iIe6kn3PMzOUfNL/EWLP6LPePZUXuh 1MXlPxrvZ5hPx1D1Vu1NDBn3P4OWFY+osqP1Vy0xRNG+fim8F4ABnpODqJuE71wr YvRxAELlUkYC6fo8chWAM6+bhxwxVaGiIKluikmVJtt0/aAcKR6fUogGfcumRGPp HzFRDZBVdLmVwbpVrfCbULP7wYk2A5QMu2skAlZSYtyWJbBRXvgweEXepJaXC6FW atD5ypi1kSX9K71BRM7DKrmY2/RsyR6Y8a2PdiOHB5MNYKoeH5o2k0htsV2zUspo 4nER4AB5a5fEysGg3yCST+m2q7UOBvcB0LblE/0sNuOGtCNPmtChdZxspsVRm2ID XkKrljy+cdOsxZ0iVcvGhyJRhlCBAoHBAOn6KMfbB11uliVyouFfV5ZoiWPeIXbF wkAnev+8kF/GmYU7bAFAhRg2qzwqTVlC2eeG+dHKgr9+xHjsTOIoLB/5jPgcIfY9 l0lZ9LmNwwvI3wg6XWnwQf9X97YZ1E1A3TpBU5XNzTo7hVtZgHDIf4ufB5sDhZ1S nXf/+uBe7gJMMnizpq/tqr+0oPJd4uac1rTp2wsFx6MJjOR8kijZOnr3SdKNU3xo shZWlRHy9qCjftxTIuOFSxdEZhJUm87w8QKBwQDoy2hYI0hMn3+lwu30lk4+LGSW 9ij7AzyTVcRR9FbYciTMQ24IrK020A9rDXkVkJ6FeTbCtT3UkFOlz3JZkEpvY/qd Mf8hfd5IO68R1Z5lZpLCFAqcIRUE9l7En9nMiuqdDPZJfhUjhlajzhQotYEv1Fqq WDmK0IaklSfGJt0LVsZSuINerHaC5HjJocL86Cqao9a1rxgJA7maCfirwABAafHc 6OhFuW5Pi6IXj9QbM7PgbGjIIXPDFfs7FkqF4H8CgcEAu0MACJSAXIL5oJcTTZVl IHgiHc/WsJyuT3JJuwxL8Juem0dntcjRvQNkIQ8qQNqEVA1vPDz8UA9BaBaXohnM 1вп/nMPHWrEIuChK+YdAJ9poxskPoo4sBBV/qDsb84iKhulp4GeKbaTdorMLXTja /AAXsjUrZzKL3VL+kzzm+OfLLVd7fSqWkkAa4F/MDg5QuRLBwRyrHw2xud0Jja/u YiQw7Vc3Dkcs4TwCqw7t3Lt9+RCAx+ASrViM6PbWjNXBAoHAa0fiDEwmM3mFn+RX ONJTuH9I0/EZLaRuNA/ga0xJAXKI1sF0YfcB1DLKCDGrTW7aPvR/cfeISP9CLTWO owvF4dOXWP4Db3HMEEnBAl0Jo/1DQMFvqkfsod7QCZkJDCQwvrOMhI3gPADayJ5d 1+zdXidkqQADdJ9ojUxXig+66lDREKoLhIheDTAxIeq0K0zq5Vz/w7avQug+jmht +uh+tTCdz4peEFPGLE5TIrybqPWIvbh5D9KqwIrOvoolSdENAoHAaa+n0ZXGovFy Hjk02KSinY80b0VzOKKXCh4vc5+2WAS9Ar4no7Cobt5QhKA0GtYpLSCmUFRvsZ1P Драгоценный камень/FH+yC5nLvKaDOpHktZONIARP8e9R1ku9o+9lOFAIU0MYHx0Ep0y4XWgMrTp UuP3ai7zn++ag7Lu1QEm5pQAd2n+zMuKZbBISVA9fPbC9RkJX66E4zVbsEUnDDBD 9Rlu+3Dc0LwSjtAxXPDInmEh3mp3O/aztMPVUPgDA4Ig7GbQC6W/ -----КОНЕЦ ЗАКРЫТОГО КЛЮЧА RSA-----
Создание открытого ключа RSA из закрытого ключа с использованием OpenSSL
Теперь, когда у вас есть закрытый ключ, вы можете использовать его для создания другого файла PEM, содержащего только ваш открытый ключ.
openssl rsa -in private-key.pem -pubout -out public-key.pem
Это должно дать вам еще один файл PEM, содержащий открытый ключ:
-----НАЧАТЬ ПУБЛИЧНЫЙ КЛЮЧ----- MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA1MSdsaPh3ShtjOo4c02+ DbYcTdwUBLY+vNSXr2tV8/jGU059Jak9CA7VSlKR/fik18D7Lq1beLjW56kV4Xvm 3qmpxOc3eNGmj8dqtO0G3Lp1FAZzxlu2SZsHmmVq9isZcN70apkwlDgIZ11NVIq/ 1iXzr0pIRMKkMNHTGBGBkYOrIcgdh3elvIqfiit6Gts/zho4YCjgyn/r3Vgy/jCu 6VbfwE9xVY/DB4srD5LrZMabRzN2YwSTI+sRqpbt7I7nZ6o8CuyqHDLjbO9VzE0p ovBshTfoyog9XGcQHwTmWn4bdnsh3I1x3gQpaqxdRs4vnKmXJ9GvC/sYla0GYXyD ecpgjITqx3QA6aKx9+EVh/o6owYTHXaToVkP7U5m8cqaloQFfA8HLsGDg9A0QaMt ixnX7KtT/ZvKFMcazRJ1GX42UaeuO1opZKtjBHLtmaPadNeZdD77VytwY2UHeW5Q Snfpos7IxUTATpd6KTWUV3snVQnyiltCI1BHJC01sWePAgMBAAE= -----КОНЕЦ ОТКРЫТОГО КЛЮЧА-----
Создание самозаверяющего сертификата RSA с использованием OpenSSL
Теперь, когда у вас есть закрытый ключ, вы можете использовать его для создания самозаверяющего сертификата. Это не обязательно, но позволяет использовать ключ для аутентификации сервера/клиента или получить специальные функции X509 в таких технологиях, как JWT и SAML.
openssl req -new -x509 -key private-key.pem -out cert.pem -days 360
Это снова создаст еще один файл PEM, на этот раз содержащий сертификат, созданный вашим закрытым ключом:
-----НАЧАТЬ СЕРТИФИКАТ----- MIIEazCCATOgAwIBAgIUU6wl3KK4lP7EIr4YtJZDkv/GuLUwDQYJKoZIhvcNAQEL BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMTAxMzAxMDI4MzlaFw0yMjAx MjUxMDI4MzlaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggGiMA0GCSqGSIb3DQEB AQUAA4IBjwAwggGKAoIBgQDUxJ2xo8fZKG2M6jhzTb4NthxN3BQEtj681Jeva1Xz +MZTTn0lqT0IDtVKUpH9+KTXwPsurVt4uNbnqRXhe+beqanE5zd40aaPx2q07Qbc unUUBnPGW7ZJmweaZWr2Kxlw3vRqmTCUOAhnXU1Uir/WJfOvSkhEwqQw0dMYEYGR g6shyB0fZ6W8ip+KK3oa2z/OGjhgKODKf+vdWDL+MK7pVt/AT3FVj8MHiysPkutk xptHM3ZjBJMj6xGqlu3sjudnqjwK7KocMuNs71XMTSmi8GyFN+jKiD1cZxAfBOZa fht2eyHYjXHeBClqrF1Gzi+cqZcn0a8L+xiVrQZhfIN5ymCMhOrHdADporh44RWH +jqjBhMddpOhWQ/tTmbxypqWhAV8DwcuwYOD0DRBoy2LGdfsq1P9m8oUxxrNEnUZ fjZRp647Wilkq2MEcu2Zo9p015l0PvtXK3BjZQd5blBKd+mizsjFRMBOl3opNZRX eydVCfKKW0IjUEckLTWxZ48CAwEAAaNTMFEwHQYDVR0OBBYEFPYvmUGJ7X198k+e Rag8kiWoWDi6MB8GA1UdIwQYMBaAFPYvmUGJ7X198k+eRag8kiWoWDi6MA8GA1Ud EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggGBABi/YG+PDTYMFjU/qwFYddCp aEMV5qi0mvh6N3eApcaQTlSE259QsyADCmKn7/ZD5sPJUHbo4x3tUIqwhij2Cdv6 TEhwgLOuginDQOSleD6cmF0A+JUNT1cVgtQYR4KcWdDDQPkMOWgBs8hMU1H9WEI5 XWBvR1LkM6VXCbj3s2Ammmu5+zh53NOcViRhb3idB5wsAZJmLr+Ob5L0dC4Ohl2U gx+Ia9GGNfS4I+0nKSigWzQc+WxFFxVrjRTtTHT+tb2g3nQMH6pQ8Ipn7VBJyMbK DLUM93xqDnhrGtwMnra3T0NRJcFJDQg4hGhuuUpX4Y/81NaStttxawe3SDjcYT+AF Al9VntdeSvyeEJRWd6QZPA3S24W1pj/IutbM8El0w4N9408u64DQR71k41dlO++K DL/g3TP5Qffg/jZ+YKb1ssgfMYmFyUYfs/aXV9lJbqGBautNmMqzARXarlERbXIj 38D4N6szhvnhOq6KO2sl30JxUm1LI9TsyQyYWqel+A== -----КОНЕЦ СЕРТИФИКАТА-----
Вы можете оставить что-то там, но часто при работе в Windows вам нужно будет создать файл PFX, который содержит как сертификат, так и закрытый ключ, чтобы вы могли его экспортировать и использовать.
Вы можете сделать это с помощью команды OpenSSL pkcs12:
openssl pkcs12 -export -inkey private-key.pem -in cert.pem -out cert.pfx
OpenSSL попросит вас создать пароль для файла PFX. Не стесняйтесь оставлять это поле пустым.
Это должно оставить вас с сертификатом, из которого Windows может как установить, так и экспортировать закрытый ключ RSA.
Узнать больше
Чтобы узнать больше об использовании RSA, ознакомьтесь с моей статьей, посвященной JOSE, «Какой алгоритм подписи мне следует использовать?».
В качестве альтернативы приведенному выше, которая использует более новую команду OpenSSL и формат PKCS # 8, проверьте openssl genpkey.
Скотт Брэди
Подпишитесь на @scottbrady91
Я помогаю разработчикам изучать OAuth и веб-безопасность.
Я инженер-менеджер и разработчик программного обеспечения, специализирующийся на OAuth, FIDO2, веб-безопасности и ASP.