Может ли кто-нибудь сказать мне правильный путь/команду для извлечения/преобразования сертификата .crt
и private key .key
файлов из файла .pem
? Я просто читал, что они взаимозаменяемы, но не так.
Преобразовать .pem в .crt и .key
Ответ 1
Мне удалось преобразовать pem в crt, используя это:
openssl x509 -outform der -in your-cert.pem -out your-cert.crt
Ответ 2
Преобразование с использованием OpenSSL
Эти команды позволяют конвертировать сертификаты и ключи в разные форматы, чтобы сделать их совместимыми с конкретными типами серверов или программного обеспечения.
-
Преобразуйте файл DER (.crt.cer.der) в PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
-
Преобразование PEM файла в DER
openssl x509 -outform der -in certificate.pem -out certificate.der
-
Преобразовать файл PKCS # 12 (.pfx.p12), содержащий закрытый ключ и сертификаты для PEM
openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes You can add -nocerts to only output the private key or add -nokeys to only output the certificates.
-
Преобразуйте файл сертификата PEM и закрытый ключ в PKCS # 12 (.pfx.p12)
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
-
Преобразование PEM в CRT (файл .CRT)
openssl x509 -outform der -in certificate.pem -out certificate.crt
OpenSSL Преобразование PEM
-
Преобразование PEM в DER
openssl x509 -outform der -in certificate.pem -out certificate.der
-
Преобразование PEM в P7B
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
-
Преобразование PEM в PFX
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
OpenSSL Преобразование DER
-
Преобразование DER в PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
OpenSSL Convert P7B
-
Преобразование P7B в PEM
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
-
Преобразование P7B в PFX
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
OpenSSL Convert PFX
-
Преобразование PFX в PEM
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
Генерировать ключи rsa по OpenSSL
-
Используя OpenSSL в командной строке, вам сначала нужно сгенерировать открытый и закрытый ключ, вы должны защитить этот файл паролем с помощью аргумента -passout, существует много разных форм, которые этот аргумент может принять, поэтому обратитесь к документации OpenSSL об этом.
openssl genrsa -out private.pem 1024
-
Создает ключевой файл private.pem, который использует 1024 бита. В этом файле фактически есть как закрытый, так и открытый ключи, поэтому вы должны извлечь общедоступный файл из этого файла:
openssl rsa -in private.pem -out public.pem -outform PEM -pubout or openssl rsa -in private.pem -pubout > public.pem or openssl rsa -in private.pem -pubout -out public.pem
У вас теперь есть public.pem, содержащий только ваш открытый ключ, вы можете свободно делиться этим с третьими сторонами. Вы можете протестировать все это, просто зашифровав что-то самостоятельно, используя свой открытый ключ, а затем расшифровывая его с помощью вашего закрытого ключа, сначала нам нужно немного данных для шифрования:
-
Файл примера:
echo 'too many secrets' > file.txt
-
Теперь у вас есть данные в файле .txt, позволяет шифровать его с помощью OpenSSL и открытый ключ:
openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
-
Это создает зашифрованную версию file.txt, называя ее file.ssl, если вы смотрите на этот файл его просто двоичный мусор, ничего очень полезного для кто угодно. Теперь вы можете дешифровать его с помощью закрытого ключа:
openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
-
Теперь вы получите незашифрованный файл в файле decrypted.txt:
cat decrypted.txt |output -> too many secrets
Параметры RSA TOOLS в OpenSSL
-
NAME
rsa - инструмент для обработки ключей RSA
-
СИНТАКСИС
openssl rsa [-help] [-inform PEM | NET | DER] [-outform PEM | NET | DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-aes128 ] [-aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [ -pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-engine id]
-
ОПИСАНИЕ
Команда rsa обрабатывает ключи RSA. Они могут быть преобразованы между различными формами и их составными частями. Обратите внимание, что эта команда использует традиционный SSLeay-совместимый формат для шифрования с закрытым ключом: более новые приложения должны использовать более безопасный формат PKCS # 8 с помощью утилиты pkcs8.
-
ПАРАМЕТРЫ КОМАНДЫ
-help
Распечатайте сообщение об использовании.
-inform DER|NET|PEM
Указывает формат ввода. Опция DER использует кодированную форму ASN1 DER, совместимую с форматом RSAPrivateKey PKCS # 1 или SubjectPublicKeyInfo. Форма PEM является форматом по умолчанию: она состоит из формата DER base64, закодированного с дополнительными строками заголовка и нижнего колонтитула. При вводе PKCS # 8 также принимаются закрытые ключи. Форма NET представляет собой формат, описанный в разделе NOTES.
-outform DER|NET|PEM
Указывает формат вывода, параметры имеют то же значение, что и параметр -inform.
-in filename
Указывает имя входного файла для чтения ключа или стандартного ввода, если этот параметр не указан. Если ключ зашифрован, вам будет предложено ввести пароль.
-passin arg
источник входного файла. Для получения дополнительной информации о формате arg см. Раздел PASS PHRASE ARGUMENTS в openssl.
-out filename
Это указывает имя выходного файла для записи ключа или стандартного вывода, если этот параметр не указан. Если какие-либо параметры шифрования установлены, тогда будет предложена фраза прохода. Имя выходного файла не должно совпадать с именем входного файла.
-passout password
источник пароля выходного файла. Для получения дополнительной информации о формате arg см. Раздел PASS PHRASE ARGUMENTS в openssl.
-aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea
Эти параметры шифруют закрытый ключ с указанным шифром перед его выходом. Запросить пароль. Если ни один из этих параметров не задан, ключ написан в виде простого текста. Это означает, что использование утилиты rsa для чтения в зашифрованном ключе без опции шифрования может быть использовано для удаления фразы пароля из ключа или путем установки параметров шифрования, которые он может использовать для добавления или изменения фразы. Эти параметры могут использоваться только с выходными файлами формата PEM.
-text
выводит различные публичные или частные ключевые компоненты в виде обычного текста в дополнение к кодированной версии.
-noout
этот параметр предотвращает вывод кодированной версии ключа.
-modulus
эта опция выводит значение модуля ключа.
-check
эта опция проверяет согласованность закрытого ключа RSA.
-pubin
по умолчанию закрытый ключ считывается из входного файла: при этом вместо этого открывается открытый ключ.
-pubout
по умолчанию выводится закрытый ключ: вместо этого будет выведен открытый ключ. Эта опция автоматически устанавливается, если вход является открытым ключом.
-RSAPublicKey_in, -RSAPublicKey_out
используется как -pubin и -pubout, кроме формата RSAPublicKey.
-engine id
указание механизма (по его уникальной строке id) приведет к тому, что rsa попытается получить функциональную ссылку на указанный движок, тем самым инициализируя его, если это необходимо. Затем двигатель будет установлен по умолчанию для всех доступных алгоритмов.
-
<сильные > ПРИМЕЧАНИЯ
Формат закрытого ключа PEM использует строки заголовка и нижнего колонтитула:
-----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----
Формат открытого ключа PEM использует строки заголовка и нижнего колонтитула:
-----BEGIN PUBLIC KEY----- -----END PUBLIC KEY-----
Формат PEM RSAPublicKey использует строки заголовка и нижнего колонтитула:
-----BEGIN RSA PUBLIC KEY----- -----END RSA PUBLIC KEY-----
Форма NET - это формат, совместимый со старыми серверами Netscape и файлами Microsoft IIS. Это использует несохраненный RC4 для его шифрования. Он не очень безопасен и поэтому должен использоваться только при необходимости.
В более новой версии IIS есть дополнительные данные в экспортированных файлах .key. Чтобы использовать их с помощью утилиты, просмотрите файл с помощью двоичного редактора и найдите строку "private-key", затем вернитесь к последовательности байтов 0x30, 0x82 (это ASN1 SEQUENCE). Скопируйте все данные с этой точки в другой файл и используйте это как вход в утилиту rsa с опцией -inform NET.
<сильные > Примеры
Удаление фразы паролей в закрытом ключе 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
Ответ 3
Чтобы извлечь ключ и сертификат из файла pem:
Извлечь ключ
openssl pkey -in foo.pem -out foo.key
Еще один метод извлечения ключа...
openssl rsa -in foo.pem -out foo.key
Извлеките все сертификаты, включая ЦС,
openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert
Извлеките первый текстовый сертификат как DER
openssl x509 -in foo.pem -outform DER -out first-cert.der
Ответ 4
.Crt хранит сертификат.. в формате pem. Таким образом,.pem, хотя он может иметь и другие вещи, такие как csr (запрос на подпись сертификата), закрытый ключ, открытый ключ или другие сертификаты, когда он хранит только сертификат, - это то же самое, что и .crt.
Pem - это файл в кодировке Base 64 с верхним и нижним колонтитулом между разделами.
Чтобы извлечь конкретный раздел, скрипт perl, такой как приведенный ниже, полностью допустим, но вы можете использовать некоторые команды openssl.
perl -ne "\$n++ if /BEGIN/; print if \$n == 1 && /BEGIN/.../END/;" mydomain.pem
где == 1 можно изменить на любой нужный вам раздел. Очевидно, что если вы точно знаете заголовок и нижний колонтитул, который вам требуется, и в файле есть только один из них (обычно, если вы сохраняете только сертификат и ключ), вы можете упростить его:
perl -ne "print if /^-----BEGIN CERTIFICATE-----\$/.../END/;" mydomain.pem