จะแปลงคีย์ส่วนตัวเป็นคีย์ส่วนตัว RSA ได้อย่างไร?


99

ให้ฉันอธิบายคำถามของฉันก่อน ฉันซื้อใบรับรองจาก CA และใช้รูปแบบต่อไปนี้เพื่อสร้าง csr และคีย์ส่วนตัว:

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

เมื่อฉันเปิดไฟล์ server.key ฉันเห็นว่ามันขึ้นต้นด้วย "----- BEGIN PRIVATE KEY -----"

ฉันใช้ใบรับรอง SSL บนเซิร์ฟเวอร์ของฉันและทุกอย่างดูดี

ตอนนี้ฉันต้องการอัปโหลดใบรับรองเดียวกันไปยัง AWS IAM เพื่อที่ฉันจะได้ใช้โดย beanstalk load balancer ฉันใช้คำสั่งต่อไปนี้จาก aws doc 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

ฉันเปลี่ยนชื่อไฟล์ใบรับรองตามต้องการ แต่ได้รับข้อผิดพลาดนี้: "400 MalformedCertificate Invalid Private Key"

สิ่งที่น่าสนใจคือในหน้า aws doc คีย์ส่วนตัวตัวอย่างที่แสดงขึ้นต้นด้วย "------- Begin RSA Private Key --------"

มีวิธีแปลงคีย์ส่วนตัวเป็นคีย์ส่วนตัว RSA โดยใช้ openssl หรือไม่

คำตอบ:


158

OpenSSL เวอร์ชันใหม่กว่ากล่าวว่าBEGIN PRIVATE KEYเนื่องจากมีคีย์ส่วนตัว + OID ที่ระบุประเภทคีย์ (ซึ่งเรียกว่ารูปแบบ PKCS8) ในการรับคีย์รูปแบบเก่า (เรียกว่า PKCS1 หรือรูปแบบ OpenSSL ดั้งเดิม) คุณสามารถทำได้:

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

อีกวิธีหนึ่งหากคุณมีคีย์ PKCS1 และต้องการ PKCS8:

openssl pkcs8 -topk8 -nocrypt -in privkey.pem

1
นี่เป็นวิธีแก้ปัญหาในการรับข้อความแสดงข้อผิดพลาดแปลก ๆ เช่นInvalid PEM structure, '-----BEGIN...' missing.จากเครื่องมือเช่น Cyberduck ในขณะที่ SSH บริสุทธิ์ที่มีคีย์เดียวกันทำงานอยู่
Daniel

1
ขอขอบคุณ! ฉันได้รับA client error (MalformedCertificate) occurred when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.และเรียกใช้สิ่งนี้บนคีย์ส่วนตัวของฉันได้รับการแก้ไขแล้ว!
philfreo

4
สำหรับการอ้างอิง: ดูstackoverflow.com/q/20065304/53974สำหรับคำอธิบายที่สมบูรณ์ยิ่งขึ้น
Blaisorblade

2
เราจะทำตรงกันข้ามกับสิ่งนี้ได้อย่างไร? ฉันต้องการPrivate KeyจากRSA Private Key?
edthethird

2
openssl pkcs8 -topk8 -nocrypt -in privkey.pemจะเขียน PKCS8 ถึง STDOUT
Paul Kehrer

26

นี่อาจเป็นประโยชน์บางอย่าง (อย่าเขียนแบ็กสแลช "\" ในคำสั่งตามตัวอักษรซึ่งมีไว้เพื่อระบุว่า "ทุกอย่างต้องอยู่ในบรรทัดเดียว")

คำสั่งใดที่จะใช้เมื่อ

ดูเหมือนว่าคำสั่งทั้งหมด (เป็นสีเทา) ใช้คีย์ไฟล์ประเภทใดก็ได้ (สีเขียว) เป็นอาร์กิวเมนต์ "in" ซึ่งเป็นสิ่งที่ดี

นี่คือคำสั่งอีกครั้งเพื่อให้คัดลอกวางได้ง่ายขึ้น:

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

และ

openssl rsa -check -in $FF
openssl rsa -text  -in $FF

1
ไฟล์ "graphml" ของรูปภาพ (ซึ่งสามารถแก้ไขได้ด้วยyworks yedเป็นต้น) สามารถพบได้ที่นี่
David Tonhofer

12

การแปลง "BEGIN OPENSSH PRIVATE KEY" เป็น "BEGIN RSA PRIVATE KEY"

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa

1
นี่คือสิ่งที่ฉันต้องการ ขอบคุณ!
RossD

พฤติกรรมนี้ได้รับการบันทึกโดยทางอ้อมใน manpage ssh-keygen แต่จริงๆแล้วการใช้แฟล็ก -m ไม่ได้กล่าวถึงสำหรับโหมดการทำงานอื่นที่ไม่ใช่ -i และ -o
ikrabbe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.