Bagaimana cara mengonversi kunci pribadi menjadi kunci pribadi RSA?

97

Izinkan saya menjelaskan pertanyaan saya terlebih dahulu. Saya membeli sertifikat dari CA dan menggunakan format berikut untuk menghasilkan csr dan kunci pribadi:

openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr

Ketika saya membuka file server.key, saya melihat bahwa itu dimulai dengan "----- BEGIN PRIVATE KEY -----"

Saya menggunakan sertifikat SSL di server saya dan semuanya terlihat baik-baik saja.

Sekarang saya ingin mengunggah sertifikat yang sama ke AWS IAM sehingga saya dapat menggunakannya untuk load balancer beanstalk. Saya menggunakan perintah berikut dari dokumen aws ini http://docs.aws.amazon.com/IAM/latest/UserGuide/InstallCert.html#SubmitCSRCertAuth

iam-servercertupload -b public_key_certificate_file  -k privatekey.pem -s certificate_object_name

Saya mengubah nama file cert sesuai kebutuhan tetapi tetap mendapatkan kesalahan ini: "400 MalformedCertificate Invalid Private Key."

Yang menarik adalah, di halaman dokumen aws, contoh kunci privat yang mereka tampilkan dimulai dengan "------- Begin RSA Private Key --------"

Apakah ada cara untuk mengonversi kunci pribadi saya menjadi kunci pribadi RSA menggunakan openssl?

Pengguna Diam
sumber

Jawaban:

155

Versi OpenSSL yang lebih baru mengatakan BEGIN PRIVATE KEYkarena mengandung kunci pribadi + OID yang mengidentifikasi jenis kunci (ini dikenal sebagai format PKCS8). Untuk mendapatkan kunci gaya lama (dikenal sebagai PKCS1 atau format OpenSSL tradisional), Anda dapat melakukan ini:

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

Bergantian, jika Anda memiliki kunci PKCS1 dan menginginkan PKCS8:

openssl pkcs8 -topk8 -nocrypt -in privkey.pem
Paul Kehrer
sumber
1
Ini juga merupakan solusi untuk mendapatkan pesan kesalahan aneh seperti Invalid PEM structure, '-----BEGIN...' missing.dari alat seperti Cyberduck sementara SSH murni dengan kunci yang sama berfungsi.
Daniel
1
Terima kasih! Saya mendapatkan A client error (MalformedCertificate) occurred when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.dan menjalankan ini pada kunci pribadi saya memperbaikinya!
philfreo
4
Untuk referensi: lihat stackoverflow.com/q/20065304/53974 untuk penjelasan yang lebih lengkap.
Blaisorblade
1
bagaimana kita melakukan kebalikan dari ini? Saya butuh Private Keydari sebuah RSA Private Key?
edthethird
1
openssl pkcs8 -topk8 -nocrypt -in privkey.pemakan menulis PKCS8 ke STDOUT
Paul Kehrer
24

Ini mungkin bisa membantu (jangan menulis garis miring terbalik '\' dalam perintah, ini dimaksudkan untuk menunjukkan bahwa "semuanya harus dalam satu baris"):

Perintah Mana yang Harus Diterapkan Kapan

Tampaknya semua perintah (berwarna abu-abu) menggunakan semua jenis file kunci (berwarna hijau) sebagai argumen "dalam". Itu bagus.

Berikut adalah perintahnya lagi untuk memudahkan copy-paste:

openssl rsa                                                -in $FF -out $TF
openssl rsa -aes256                                        -in $FF -out $TF
openssl pkcs8 -topk8 -nocrypt                              -in $FF -out $TF
openssl pkcs8 -topk8 -v2 aes-256-cbc -v2prf hmacWithSHA256 -in $FF -out $TF

dan

openssl rsa -check -in $FF
openssl rsa -text  -in $FF
David Tonhofer
sumber
1
File "graphml" dari gambar (yang dapat diedit dengan yworks yed misalnya) dapat ditemukan di sini
David Tonhofer
8

Untuk Mengonversi "BEGIN OPENSSH PRIVATE KEY" menjadi "BEGIN RSA PRIVATE KEY"

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
ahirapara
sumber
Inilah yang saya butuhkan. Terima kasih!
RossD
Perilaku ini didokumentasikan secara tidak langsung di halaman manual ssh-keygen, tetapi penggunaan tanda -m sebenarnya tidak disebutkan untuk mode operasi selain -i dan -o
ikrabbe