PKCS # 12 sertifikasını OpenSSL kullanarak PEM'e dönüştürme


212

Google Code'da Windows için openssl-for-windows'dan indirdiğim Windows 7'de OpenSSL x64 var . Koşmaya çalışıyorum:

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" 

ama bir hata alıyorum.

unable to load private key

PSS'deki sertifikayı OpenSSL kullanarak PKCS # 12 deposundan nasıl ayıklayabilirim?


@jww Bu sorunun 3 yıldan eski olduğu düşünülürse konu dışı bayrağı işaretlemek için biraz geç.
Dean MacGregor

Sadece bir formalite böylece insanlar konu dışı bilmek. İnsanlar aynı konu dışı soruları soruyor ve bu soruya atıfta bulunuyorlar. İnsanlara konu dışı söylenmezse, Yığın Taşması'nı sormaya devam ederler.
jww

2
@jww, bağladığınız meta soruda en yüksek oyu alan cevabı "Stack Overflow'da DevOps sorularına izin verilmeli" diyor. Oylayacağım, çünkü cevap ihtiyaçlarımı karşıladı (benim için programlama yapmıyordum, eğer istersem yanıtı kolayca bir programa dahil edebilirim)
14'te dcorking

Yanıtlar:


537

Deneyin:

openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys
openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes

Bundan sonra:

  • newfile.crt.pem dosyasındaki sertifika
  • newfile.key.pem içindeki özel anahtar

Sertifikayı ve anahtarı aynı dosyaya koymak için aşağıdakileri kullanın

openssl pkcs12 -in path.p12 -out newfile.pem

PKCS # 12 şifresini doğrudan komut satırından (örn. Bir komut dosyası) girmeniz gerekiyorsa, şunu ekleyin -passin pass:${PASSWORD}:

openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys -passin 'pass:P@s5w0rD'

2
Özel anahtar ve sertifikanın aynı * .pem dosyasında saklanması mümkün müdür?
Ramis

18
evet, öyle:openssl pkcs12 -in path.p12 -out newfile.pem
Gee-Bee

2
Şifre Al istemek. o nedir ?
Saurabh Chandra Patel

4
@SaurabhChandraPatel sertifikanızın şifresini bilmeniz gerekir. Bu unutulmuş bir şifreyi kurtarmak için bir araç değil
Dean MacGregor

2
-nodes atlanırsa, özel anahtar çıkarılmaz.
Meixner

22

Sadece bir şifre girmeniz gerekiyor. Aşağıdaki sözdizimiyle aynı komut satırında yapabilirsiniz:

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" -passin pass:[password]

Daha sonra, çıkış dosyanızdaki özel anahtarı şifrelemek için bir parola girmeniz istenir. Şifrelenmemiş (düz metin) özel anahtarı dışa aktarmak istiyorsanız, yukarıdaki satıra "düğümler" seçeneğini ekleyin:

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" -passin pass:[password] -nodes

Daha fazla bilgi: http://www.openssl.org/docs/apps/pkcs12.html


16

Python'u kullanabiliyorsanız, pyopensslmodülünüz varsa daha da kolaydır . İşte burada:

from OpenSSL import crypto

# May require "" for empty password depending on version

with open("push.p12", "rb") as file:
    p12 = crypto.load_pkcs12(file.read(), "my_passphrase")

# PEM formatted private key
print crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey())

# PEM formatted certificate
print crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate())

Kullanarak dosyayı açmak için herhangi bir neden var mı filedeğil open? Ben sadece (komut olarak benim çözüm arama OpenSSH'yi basitleştirmek) gelecekte de kullanmak için gidiyorum olarak anlamak istiyorum
Jan Vlcinsky

Hayır, fark yok. Sadece yapabilirsin open("push.p12", 'rb').read().
KVISH

2
Python 3 kullanıyorsanız, içeriği muhtemelen dosyalara yazmak isteyeceksiniz: with open("push.pem", "wb") as fobj: fobj.write(crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate()))sertifikayı yazmak ve with open("push.key", "wb") as fobj: fobj.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey()))anahtar için.
Adam Parkin

Python 3.7 kullanıyorum, yukarıdaki örneği çalıştırırken, ben aşağıdakileri alıyorum: "TypeError: ctype 'char' için başlatıcısı değil uzunluğu 1 bayt olmalı, str değil"
Parolamda

Neden tek bir komut yerine dosya oluşturmak, kodu girmek, kaydetmek ve çalıştırmak "daha da kolay"?
Torben Gundtofte-Bruun

3

Bir PFX dosyası vardı ve NGINX için KEY dosyası oluşturmak gerekiyordu, bu yüzden bunu yaptım:

openssl pkcs12 -in file.pfx -out file.key -nocerts -nodes

Sonra KEY dosyasını düzenlemek ve tüm içeriği kaldırmak zorunda kaldı -----BEGIN PRIVATE KEY-----. Bundan sonra NGINX KEY dosyasını kabul etti.


0

Herhangi bir şifre olmadan bir PEM dosyasına ihtiyacınız varsa bu çözümü kullanabilirsiniz .

Sadece özel anahtarı ve sertifikayı kopyalayıp aynı dosyaya yapıştırın ve .pem olarak kaydedin.

Dosya şöyle görünecektir:

-----BEGIN PRIVATE KEY-----
............................
............................
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
...........................
...........................
-----END CERTIFICATE-----

HTTPS için Cisco cihazlarına sertifika yüklemek için bulduğum tek yol bu.

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.