Làm thế nào để chuyển đổi một khóa cá nhân thành một khóa cá nhân RSA?


97

Hãy để tôi giải thích câu hỏi của tôi trước. Tôi đã mua chứng chỉ từ CA và sử dụng định dạng sau để tạo csr và khóa cá nhân:

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

Khi tôi mở tệp server.key, tôi thấy nó bắt đầu bằng "----- BẮT ĐẦU TỪ KHÓA RIÊNG TƯ -----"

Tôi sử dụng chứng chỉ SSL trên máy chủ của mình và mọi thứ đều ổn.

Bây giờ tôi muốn tải cùng một chứng chỉ lên AWS IAM để tôi có thể sử dụng nó cho bộ cân bằng tải cây đậu. Tôi sử dụng lệnh sau từ tài liệu aws này 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

Tôi thay đổi tên tệp chứng chỉ theo yêu cầu nhưng vẫn gặp lỗi này: "400 Khóa cá nhân không hợp lệ MalformedCertificate."

Điều thú vị là, trên trang tài liệu aws, khóa cá nhân mẫu mà họ hiển thị bắt đầu bằng "------- Begin RSA Private Key --------"

Có cách nào để chuyển đổi khóa cá nhân của tôi thành khóa cá nhân RSA bằng cách sử dụng openssl không?

Câu trả lời:


155

Các phiên bản OpenSSL mới hơn nói rằng BEGIN PRIVATE KEYvì chúng chứa khóa riêng tư + một OID xác định loại khóa (đây được gọi là định dạng PKCS8). Để lấy khóa kiểu cũ (được gọi là PKCS1 hoặc định dạng OpenSSL truyền thống), bạn có thể làm như sau:

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

Ngoài ra, nếu bạn có khóa PKCS1 và muốn PKCS8:

openssl pkcs8 -topk8 -nocrypt -in privkey.pem

1
Đây cũng là giải pháp để nhận các thông báo lỗi kỳ lạ như Invalid PEM structure, '-----BEGIN...' missing.từ các công cụ như Cyberduck trong khi SSH thuần túy với cùng một khóa đang hoạt động.
Daniel

1
Cảm ơn bạn! Tôi đang nhận A client error (MalformedCertificate) occurred when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.và chạy điều này trên khóa riêng của mình, đã sửa nó!
philfreo

4
Để tham khảo: hãy xem stackoverflow.com/q/20065304/53974 để có giải thích đầy đủ hơn.
Blaisorblade,

1
làm thế nào để chúng tôi làm ngược lại với điều này? Tôi cần một Private Keytừ một RSA Private Key?
edthethird

1
openssl pkcs8 -topk8 -nocrypt -in privkey.pemsẽ viết PKCS8 cho STDOUT
Paul Kehrer,

24

Điều này có thể hữu ích (không viết dấu gạch chéo ngược theo nghĩa đen '\' trong các lệnh, chúng nhằm chỉ ra rằng "mọi thứ phải nằm trên một dòng"):

Áp dụng lệnh nào khi

Có vẻ như tất cả các lệnh (màu xám) lấy bất kỳ loại tệp khóa nào (màu xanh lá cây) làm đối số "trong". Cái gì là tốt.

Dưới đây là các lệnh một lần nữa để sao chép dán dễ dàng hơn:

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
Các "graphml" tập tin của hình ảnh (có thể chỉnh sửa với yworks Yed ví dụ) có thể được tìm thấy ở đây
David Tonhofer

8

Để chuyển đổi "BEGIN OPENSSH PRIVATE KEY" thành "BEGIN RSA PRIVATE KEY"

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

Đây chính xác là những gì tôi cần. Cảm ơn!
RossD

Hành vi này là tài liệu gián tiếp trên manpage ssh-keygen, nhưng việc sử dụng của lá cờ -m là thực sự không được đề cập cho các chế độ hoạt động khác ngoài -i và -o
ikrabbe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.