Конвертировать .pem в .crt и .key

373

Может кто-нибудь сказать мне правильный путь / команду для извлечения / преобразования файлов сертификата .crtи закрытого ключа .keyиз .pemфайла? Я просто прочитал, что они взаимозаменяемы, но не как.

Lanbo
источник

Ответы:

503

Я был в состоянии преобразовать Pem в CRT, используя это:

openssl x509 -outform der -in your-cert.pem -out your-cert.crt
CB
источник
13
Использование текстового редактора не лучший подход. Чтобы извлечь ключ в форме PKCS8: openssl pkey -in mumble.pem -out mumble-key.pem Если версия OpenSSL старше 1.0.0, извлечь ключ как ключ RSA:openssl rsa -in mumble.pem -out mumble-key.pem
Андрон
131
Я попробовал вашу команду, но у меня было:unable to load certificate 140584440387400:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
Дэмиен Кэрол
15
команда ключа (openssl pkey -in mumble.pem -out mumble-key.pem) дает следующее: невозможно загрузить ключ 129051320116880: ошибка: 0906D06C: процедуры PEM: PEM_read_bio: нет строки запуска: pem_lib.c: 703: ожидание: ЛЮБОЕ
ЧАСТНЫЙ
2
openssl rsa -in your-cert.pem -outform pem -out your-key.pem
troyfolger
3
@ Андрон и pkey и rsa выдают мне Expecting: ANY PRIVATE KEYошибку.
Аэро Ван
394

Конвертация с использованием 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 Convert 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
    
  • Теперь у вас есть некоторые данные в file.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

  • ИМЯ

    rsa - инструмент обработки ключей RSA

  • СИНТАКСИС

    openssl rsa [-help] [-inform PEM | NET | DER] [-outform PEM | NET | DER] [-in имя файла] [-passin arg] [-out имя файла] [-passout arg] [-aes128] [- aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-desa] [-text] [-noout] [-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, совместимую с форматом PKCS # 1 RSAPrivateKey или SubjectPublicKeyInfo. Форма PEM является форматом по умолчанию: она состоит из формата DER base64, закодированного с дополнительными строками верхнего и нижнего колонтитула. На вход PKCS # 8 также принимаются закрытые ключи. Форма NET - это формат, описанный в разделе ПРИМЕЧАНИЯ.

    -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
    

    указание механизма (по его уникальной строке идентификатора) заставит 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 .key, для шифрования используется несоленый RC4. Это не очень безопасно и поэтому должно использоваться только при необходимости.

    Некоторые новые версии IIS содержат дополнительные данные в экспортированных файлах .key. Чтобы использовать их вместе с утилитой, просмотрите файл в двоичном редакторе и найдите строку «закрытый ключ», а затем проследите до последовательности байтов 0x30, 0x82 (это последовательность ASN1). Скопируйте все данные с этого момента в другой файл и используйте их в качестве входных данных для утилиты 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
    
вечнозеленый
источник
32
Тем не менее, это не отвечает на вопрос о том, как получить закрытый ключ из (экспортированного) двоичного сертификата.
bbaassssiiee
спасибо, интересно, если у меня есть PEM, содержащий закрытый ключ и сертификаты, как я могу получить только сертификаты? Я знаю, что могу скопировать часть сертификатов из него с помощью текстового редактора, но я хочу знать, есть ли какая-нибудь команда openssl, спасибо
workplaylifecycle
46

Чтобы извлечь ключ и сертификат из файла pem:

Извлечь ключ

openssl pkey -in foo.pem -out foo.key

Еще один метод извлечения ключа ...

openssl rsa -in foo.pem -out foo.key

Извлеките все сертификаты, в том числе CA Chain

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
Шоссе Жизни
источник
7
openssl x509 -outform der -in C: \ Users \ Greg \ .ssh \ e360_stork_listener.pem -out C: \ Users \ Greg \ .ssh \ e360_stork_listener.crt не удалось загрузить сертификат 4294956672: ошибка: 0906D06C: процедуры PEM: PEM_read_b нет начальной строки: pem_lib.c: 708: Ожидается: ДОВЕРЕННЫЙ СЕРТИФИКАТ
user3217883
5

0. Условие : openssl должно быть установлено. В Windows, если Git Bashустановлена, попробуйте это! Альтернативные двоичные файлы можно найти здесь.

1. Выписка .keyиз .pem:

openssl pkey -in cert.pem -out cert.key

2. Выписка .crtиз .pem:

openssl crl2pkcs7 -nocrl -certfile cert.pem | openssl pkcs7 -print_certs -out cert.crt
Saikat
источник
1

.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
Жерар ОНЕЙЛ
источник
0

Если вы задали этот вопрос, потому что используете, mkcertто дело в том, что .pemфайл - это сертификат, а -key.pemфайл - это ключ.

(Вам не нужно конвертировать, просто запустите mkcert yourdomain.dev otherdomain.dev)

гулянка
источник