Перетворити .pem в .crt і .key


371

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



Відповіді:


500

Мені вдалося перетворити pem в crt за допомогою цього:

openssl x509 -outform der -in your-cert.pem -out your-cert.crt

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
Andron

131
Я спробував ваше командування, але мені довелося:unable to load certificate 140584440387400:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
Деміен Керол

15
команда key (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
@Andron і pkey, і rsa дають мені Expecting: ANY PRIVATE KEYпомилку.
Aero Wang

393

Перетворення за допомогою 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 конвертувати 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 конвертувати 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] [-інформація PEM | NET | DER] [-в імені файлу] [-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] [-вхідний ідентифікатор]

  • ОПИС

    Команда rsa обробляє ключі RSA. Вони можуть бути перетворені між різними формами та роздрукованими їх компонентами. Зверніть увагу, що ця команда використовує традиційний для шифрування приватного ключа сумісний формат SSLeay: нові програми повинні використовувати більш захищений формат PKCS № 8 за допомогою утиліти pkcs8.

  • ВАРІАНТ КОМАНДИ

    -help
    

    Роздрукуйте повідомлення про використання.

    -inform DER|NET|PEM
    

    Це визначає формат введення. Параметр DER використовує кодовану форму ASER DER, сумісну з форматом RSAPrivateKey PKCS або 1 або SubjectPublicKeyInfo. Форма PEM - це формат за замовчуванням: він складається з формату DER base64, закодованого додатковими лініями заголовка та колонтитула. На вхід PKCS # 8 приватні ключі також приймаються. Форма NET - це формат, описаний у розділі ПРИМІТКИ.

    -outform DER|NET|PEM
    

    Тут вказується вихідний формат, параметри мають те саме значення, що і опція -inform.

    -in filename
    

    Це вказує ім'я вхідного файлу для читання ключа або стандартного вводу, якщо ця опція не вказана. Якщо ключ зашифрований, буде запропоновано фразу пропуску.

    -passin arg
    

    джерело пароля вхідного файлу. Більш детальну інформацію про формат аргументу див. У розділі «АРГУМЕНТИ ПАРАФАЗНОЇ ФРАЗИ» у openssl.

    -out filename
    

    Це визначає ім'я вихідного файлу для запису ключа або стандартного виводу, якщо ця опція не вказана. Якщо встановлені будь-які параметри шифрування, тоді буде запропоновано фразу пропуску. Ім’я вихідного файлу не повинно бути таким самим, як ім'я вхідного файлу.

    -passout password
    

    джерело пароля вихідного файлу. Більш детальну інформацію про формат аргументу див. У розділі «АРГУМЕНТИ ПАРАФАЗНОЇ ФРАЗИ» у 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 .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

Щоб витягти ключ і cert з файлу 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

7
openssl x509 -outform der -in C: \ Users \ Greg \ .ssh \ e360_stork_listener.pem -out C: \ Users \ Greg \ .ssh \ e360_stork_listener.crt не вдається завантажити сертифікат 4294956672: error: 0906D06C: PEM rutines: PEM_read_bio: немає стартової лінії: pem_lib.c: 708: Очікуємо: довірений сертифікат
користувач3217883

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

1

.Crt зберігає сертифікат .. у форматі pem. Отже, .pem, хоча він також може мати інші речі, такі як csr (запит підпису сертифіката), приватний ключ, відкритий ключ або інші серти, коли він зберігає лише cert, - це те саме, що і .crt.

Pem - це базовий 64 закодований файл із заголовком та колонтитулом між кожним розділом.

Щоб витягнути певний розділ, сценарій perl, такий як наведений нижче, є абсолютно дійсним, але сміливо використовуйте деякі команди openssl.

 perl -ne "\$n++ if /BEGIN/; print if \$n == 1 && /BEGIN/.../END/;" mydomain.pem

де == 1 може бути змінено на будь-який розділ, який вам потрібен. Очевидно, що якщо ви точно знаєте потрібний вам колонтитул і колонтитул, і у файлі є лише один із них (як правило, у випадку, якщо ви зберігаєте лише cert і ключ там), ви можете спростити його:

 perl -ne "print if /^-----BEGIN CERTIFICATE-----\$/.../END/;" mydomain.pem

0

Якщо ви задали це питання тому, що ви використовуєте, mkcertто хитрість полягає в тому, що .pemфайл - це cert, а -key.pemфайл - ключ.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.