.Pem dosyasını .key ve .crt dosyalarından nasıl alabilirim?


Yanıtlar:


799

Anahtarlarınız zaten PEM biçiminde olabilir, ancak yalnızca .crt veya .key ile adlandırılmış olabilir.

Dosyanın içeriği ile başlıyorsa -----BEGINve bir metin düzenleyicisinde okuyabiliyorsanız:

Dosya, ikili biçimde değil, ASCII'de okunabilen base64 kullanır. Sertifika zaten PEM biçiminde. Uzantıyı .pem olarak değiştirmeniz yeterlidir.

Dosya ikili dosyadaysa:

Server.crt için şunu kullanırsınız:

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

Server.key openssl rsaiçin yerine kullanın openssl x509.

Server.key büyük olasılıkla özel anahtarınızdır ve .crt dosyası döndürülen, imzalanan x509 sertifikasıdır.

Bu bir Web sunucusu içinse ve ayrı bir özel ve genel anahtar yüklemeyi belirleyemiyorsanız:

İki dosyayı birleştirmeniz gerekebilir. Bu kullanım için:

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

Bu dosyada sakladığınız izinleri yönetmenize yardımcı olması için "includeprivatekey" ile dosya adlandırmayı öneririm.


2
Server.key biçimini kontrol edin. Sadece RSA olduğunu varsaydım. Ancak dosyanın ilk satırını okumak muhtemelen bunu size söyleyecektir.
maxwellb

10
Sadece cat server.crt server.key > server.pemaçık yorumu kendi çizgisine koymayacak bir kafa yukarı , ki bu bir gereklilik gibi görünüyor. Kurye postası bana cehennem verdi ve neyin yanlış gittiğini anlamak saatlerimi aldı.
Graham Walters

1
Teşekkürler Graham. Farklı araçlar dosyaları farklı şekilde oluşturur ve sonuçta bazı doğrulamalar iyidir. Bu adımları uyguladığımda, dosyalar örneğin bir satırsonu ile sona erdi.
maxwellb

.Crt ve .key dosyalarını birlikte birleştirmeyle ilgili ipucu çok yardımcı oldu. Sertifikamı stunnel3 ile kullanmak istedim, ancak anahtar dosyasını belirtmenin bir yolu yoktu. Birleştirmeyi kullanarak çalıştı. (Aslında, stunnel3 bir Perl programı olduğundan, anahtar dosyasını okumak için kendime bir seçenek ekledim. Ancak, daha sonra birleştirme çalıştığından beri stunnel3'ü orijinal koduna geri döndürdüm.)
LS

2
Sadece kedinin server.crt server.key > server.includesprivatekey.pemhaproxy 1.5 ile SSL için yararlı olduğunu söylemek bir yumru .
jimm101

224

Bunu AWS ELB için yapmam gerekiyordu. Diyalog tarafından defalarca dövüldükten sonra, nihayet benim için işe yaradı:

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

Teşekkürler NCZ

Düzenleme: @floatingrock'un dediği gibi

AWS ile dosya adının başına başlamayı unutmayın file://. Yani şöyle görünecek:

 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
AWS ile dosya adının başına başlamayı unutmayın file://. Yani şöyle görünecek: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
Girişiniz bir pem dosyası ise ikinci komut hiçbir şey yapmaz, bu yüzden varsayalım, sadece ilk komuta ihtiyacınız vardır
Kristofer

Müthiş! Bu benim için iyi çalıştı! Sadece .key ve .crt dosyalarımı kod satırlarınızı kullanarak .pem'e dönüştürdüm ve sonra AWS konsolu aracılığıyla yükledim (kopyala / yapıştır). Teşekkürler!
Diego D

79

Bir pemdosya sertifikayı ve özel anahtarı içerir. Sertifikanızın / anahtarınızın biçimine bağlıdır, ancak muhtemelen bu kadar basittir:

cat server.crt server.key > server.pem

alıyorum devam-bash: server.key.pem: Permission denied
tq

2
@tq: Bu, dosyayı okuma veya yazma izniniz olmadığı anlamına gelir.
STH

teşekkür ederim @ sth izin arayacaktır. ama bunu sudo komutları ile yapıyordum
tq

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

2
Yeni satırlar için watchout, pem dosyanız ----- SON SERTİFİKA ---------- BAŞLANGIÇ BELGESİ -----
Wolfgang Fahl

24

Ayrıca, bir parola istemesini istemiyorsanız, aşağıdaki komutu çalıştırmanız gerekir:

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

9
İle başlayan -----BEGIN RSA PRIVATE KEY-----ve bununla başlayan bir dosya istiyorsanız -----BEGIN ENCRYPTED PRIVATE KEY-----, bu komut kullanmak istediğiniz komuttur.
Philippe Gerber

18

bu .pem dosyası oluşturmak için en iyi seçenektir

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

4

Ne gözlemledim: sertifika oluşturmak için openssl kullanırsanız, crt dosyasında hem metin bölümünü hem de base64 sertifika bölümünü yakalar. Katı pem formatı ( wiki tanımı ) dosyanın BEGIN ve END ile başlayıp bitmesi gerektiğini söylüyor .

.pem - (Gizliliği Artırılmış Posta) Base64 kodlu DER sertifikası, "----- BAŞLANGIÇ BELGESİ -----" ve "----- SON SERTİFİKA -----"

Bu yüzden katı pem formatı bekleyen bazı kütüphanelerde (java ile karşılaştım), oluşturulan crt doğrulamayı 'geçersiz pem formatı' olarak başarısız olur.

Çizgileri BEGIN / END CERTIFICATE ile kopyalayıp grep etseniz ve bir cert.pem dosyasına yapıştırsanız bile çalışmalıdır.

İşte yaptığım, çok temiz değil, ama benim için çalışıyor, temelde BEGIN satırından başlayarak metni filtreler:

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


1
başka bir seçenek, katı olmayan sertifikayı geçmek openssl x509. Geçerli bir PEM sertifikası cat certificate.crt | openssl x509 > certificate.pem
verecektir

Eğer "BEGIN" dan dosyanın sonuna kadar her şeyi almak istiyorsanız, bu sed için bir iştir. Özellikle, sed -n '/--BEGIN/,$p' cert.crtbu durumda olduğu gibi bir şey istersiniz . Açıklamak için: "-n" varsayılan olarak hiçbir şey yazdırmıyor sed ve ardından aralık ifadesi söyler /--BEGIN/,$yapar pkomutu (baskı) içeren ilk çizgi arasındaki çizgileri için geçerlidir --BEGINve dosyanın sonuna ( $).
dannysauer

4

Godaddy'den uygulama motoruna geçmeye çalışıyordum. Hile bu çizgiyi ne kullanıyordu:

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

Tam olarak olduğu gibi, ancak alan adımla adı değiştirmek (gerçekten önemli değil)

Ortak ad / kuruluşla ilgili tüm soruları www.name.com olarak cevapladım.

Sonra csr'yi açtım, kopyaladım, git babaya yapıştırdım, sonra indirdim, sıkıştırmayı açtım, terminal ile sıkıştırılmamış klasöre gittik ve girdim:

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

Sonra , Google Apps Özel Alan Adı SSL ile Sorun'dan bu talimatları kullandım , bunlar:

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

aynen olduğu gibi, privateKey.key yerine name.unencrypted.priv.key kullandım ve www_mydomain_com.crt yerine name.crt kullandım

Sonra public.pem'i "PEM kodlu X.509 sertifikası" için yönetici konsoluna yükledim ve "Şifrelenmemiş PEM kodlu RSA özel anahtarı" için private.pem'i yükledim.

.. Ve sonunda işe yaradı.


4

AWS'ye bir GoDaddy sertifikası yüklemeye çalışırken birkaç kez başarısız oldum, ama sonunda oldukça basitti. Hiçbir şeyi .pem'e dönüştürmeye gerek yok. Zincir parametresine GoDaddy paket sertifikasını eklediğinizden emin olmanız gerekir, örn.

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

Ve önceki başarısız yüklemenizi silmek için şunları yapabilirsiniz:

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

Bu benim için işe yaramadıAn error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
Adam Raudonis

4
  1. AppleId tarafından geçici portaldan sertifika indirin,
  2. Sertifikayı anahtarlıktan dışa aktarın ve adını verin (Sertifikalar.p12),
  3. Certificates.p12 dosyasının üzerine kaydettiğiniz terminal ve goto klasörünü açın,
  4. Aşağıdaki komutları çalıştırın:

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

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

  5. .Pem dosyanız hazır "pushcert.pem".

0
  • Terminali açın.
  • Sertifikanızın bulunduğu klasöre gidin.
  • Adınızı sertifikanızla değiştirerek aşağıdaki komutu yürütün.

openssl pkcs12 - YOUR_CERTIFICATE.p12 içinde-YOUR_CERTIFICATE.pem -nodes -clcerts

  • Umarım işe yarar !!
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.