Come ottenere il file .pem dai file .key e .crt?


Risposte:


801

Le tue chiavi potrebbero essere già in formato PEM, ma semplicemente denominate con .crt o .key.

Se il contenuto del file inizia con -----BEGINe puoi leggerlo in un editor di testo:

Il file utilizza base64, che è leggibile in formato ASCII, non in formato binario. Il certificato è già in formato PEM. Cambia l'estensione in .pem.

Se il file è in binario:

Per server.crt, useresti

openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem

Per server.key, utilizzare openssl rsaal posto di openssl x509.

Server.key è probabilmente la tua chiave privata e il file .crt è il certificato x509 restituito, firmato.

Se questo è per un server Web e non è possibile specificare il caricamento di una chiave privata e pubblica separata:

Potrebbe essere necessario concatenare i due file. Per questo uso:

cat server.crt server.key > server.includesprivatekey.pem

Consiglierei di nominare i file con "Includesprivatekey" per aiutarti a gestire le autorizzazioni che mantengono con questo file.


2
Controlla il formato del server.key. Ho solo pensato che fosse RSA. Ma leggere la prima riga del file probabilmente lo dirà.
maxwellb,

10
Solo un avvertimento che cat server.crt server.key > server.pemnon inserirà il commento aperto sulla propria riga, che sembra essere un requisito. La posta del corriere mi ha dato un inferno e mi ci sono volute ore per capire cosa stava andando storto.
Graham Walters,

1
Grazie Graham. Diversi strumenti genereranno i file in modo diverso e, in definitiva, una buona verifica è buona. Quando ho eseguito questi passaggi, i file si sono conclusi con una nuova riga, ad esempio.
maxwellb,

Il consiglio di concatenare i file .crt e .key insieme è stato molto utile. Volevo usare il mio certificato con stunnel3, ma non aveva un modo per specificare il file chiave. Usando la concatenazione ha funzionato. (In realtà, poiché stunnel3 è un programma Perl, ho aggiunto un'opzione a me stesso per leggere il file chiave. Tuttavia, poiché ho visto in seguito il concatenamento ha funzionato, ho ripristinato stunnel3 al suo codice originale.)
LS

2
Solo un bernoccolo per dire che cat server.crt server.key > server.includesprivatekey.pemè utile per SSL con haproxy 1.5.
jimm101,

224

Ho dovuto farlo per un ELB AWS. Dopo essere stato picchiato molte volte dal dialogo, finalmente questo è ciò che ha funzionato per me:

openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem

Grazie NCZ

Modifica: come dice @floatingrock

Con AWS, non dimenticare di anteporre il nome file a file://. Quindi sembrerà:

 aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://path/to/server.crt --private-key file://path/to/private.key --path /cloudfront/static/

http://docs.aws.amazon.com/cli/latest/reference/iam/upload-server-certificate.html


19
Con AWS, non dimenticare di anteporre il nome file a file://. Quindi sembrerà:aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://~/Desktop/server.crt --private-key file://~/Desktop/private.key --path /cloudfront/static/
FloatingRock

1
Il secondo comando non fa nulla se il tuo input è un file pem quindi supponendo che lo sia, hai solo bisogno del primo comando
Kristofer

Eccezionale! Questo ha funzionato bene per me! Ho appena convertito i miei file .key e .crt in .pem usando le tue righe di codice e poi ho caricato (copia / incolla) tramite la console AWS. Grazie!
Diego D,

79

Un pemfile contiene il certificato e la chiave privata. Dipende dal formato in cui si trova il certificato / chiave, ma probabilmente è semplice come questo:

cat server.crt server.key > server.pem

I Continuo a ricevere-bash: server.key.pem: Permission denied
TQ

2
@tq: ciò significa che non sei autorizzato a leggere o scrivere quel file.
qc

grazie @sth cercherà il permesso. ma lo stavo facendo con i comandi sudo
tq

8
@tq: cat server.crt server.key | sudo tee server.pem
dimir

2
attenzione alle nuove righe mancanti, il nostro file PEM potrebbe avere righe confuse come ----- CERTIFICATO FINE ---------- INIZIA CERTIFICATO -----
Wolfgang Fahl

24

Inoltre, se non si desidera che richieda una passphrase, è necessario eseguire il comando seguente:

openssl rsa -in server.key -out server.key

9
Se vuoi un file che inizia con -----BEGIN RSA PRIVATE KEY-----e ne hai uno che inizia con -----BEGIN ENCRYPTED PRIVATE KEY-----, questo è il comando che vuoi usare.
Philippe Gerber,

18

questa è l'opzione migliore per creare il file .pem

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts

4

Quello che ho osservato è: se si utilizza openssl per generare certificati, acquisisce sia la parte di testo che la parte del certificato base64 nel file crt. Il formato pem rigoroso dice ( definizione wiki ) che il file dovrebbe iniziare e finire con BEGIN ed END.

.pem - (Privacy Enhanced Mail) Certificato DER codificato Base64, racchiuso tra "----- INIZIA CERTIFICATO -----" e "----- FINE CERTIFICATO -----"

Quindi per alcune librerie (ho riscontrato questo in Java) che prevedono un formato pem rigoroso, il crt generato fallirebbe la convalida come "formato pem non valido".

Anche se copi o grep le linee con BEGIN / END CERTIFICATE e lo incolli in un file cert.pem, dovrebbe funzionare.

Ecco cosa faccio, non molto pulito, ma funziona per me, fondamentalmente filtra il testo a partire dalla riga INIZIA:

grep -A 1000 INIZIO cert.crt> cert.pem


1
un'altra opzione è semplicemente quella di passare il certificato non rigoroso openssl x509. cat certificate.crt | openssl x509 > certificate.pem
Emetterà

Se vuoi ottenere tutto da "INIZIO" alla fine del file, questo è un lavoro per sed. In particolare, vuoi qualcosa di simile sed -n '/--BEGIN/,$p' cert.crtin questo caso. Per spiegarlo: "-n" dice a sed di non stampare nulla per impostazione predefinita, quindi l'espressione di intervallo /--BEGIN/,$fa papplicare il comando (stampa) alle linee tra la prima riga che contiene --BEGINe la fine del file ( $).
dannysauer,

4

Stavo cercando di passare da Godaddy a App Engine. Cosa ha fatto il trucco usando questa linea:

openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr

Esattamente come è, ma sostituendo il nome con il mio nome di dominio (non che abbia davvero importanza)

E ho risposto a tutte le domande relative al nome / organizzazione comune come www.name.com

Quindi ho aperto il CSR, l'ho copiato, incollato in go papà, quindi scaricato, decompresso, navigato nella cartella decompressa con il terminale ed inserito:

cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt

Quindi ho usato queste istruzioni di Problemi con il dominio personalizzato SSL di Google Apps , che erano:

openssl rsa -in privateKey.key -text > private.pem
openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem

esattamente come è, tranne che per privateKey.key ho usato name.unencrypted.priv.key e invece di www_mydomain_com.crt, ho usato name.crt

Quindi ho caricato public.pem nella console di amministrazione per il "certificato X.509 codificato PEM" e caricato private.pem per "chiave privata RSA codificata PEM non codificata".

.. E alla fine ha funzionato.


4

Tentare di caricare un certificato GoDaddy su AWS non è riuscito più volte, ma alla fine è stato piuttosto semplice. Non c'è bisogno di convertire nulla in .pem. Devi solo essere sicuro di includere il certificato del bundle GoDaddy nel parametro chain, ad es

aws iam upload-server-certificate
    --server-certificate-name mycert
    --certificate-body file://try2/40271b1b25236fd1.crt
    --private-key file://server.key
    --path /cloudfront/production/
    --certificate-chain file://try2/gdig2_bundle.crt

E per cancellare il tuo precedente caricamento fallito puoi farlo

aws iam delete-server-certificate --server-certificate-name mypreviouscert

Questo non ha funzionato per meAn error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
Adam Raudonis,

4
  1. Scarica il certificato dal portale provvisorio di appleId,
  2. Esporta il certificato dalla catena chiave e dai il nome (Certificates.p12),
  3. Apri il terminale e vai alla cartella in cui salvi sopra il file Certificates.p12,
  4. Esegui sotto i comandi:

    a) openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes,

    b) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts

  5. Il tuo file .pem pronto "pushcert.pem".

0
  • Terminale aperto
  • Vai alla cartella in cui si trova il tuo certificato.
  • Eseguire il comando seguente sostituendo il nome con il certificato.

openssl pkcs12 -in YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts

  • Spero che funzioni !!
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.