Як перетворити приватний ключ в приватний ключ RSA?


97

Дозвольте спочатку пояснити своє запитання. Я купив сертифікат у ЦА і використав наступний формат для генерації csr та приватного ключа:

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

Коли я відкриваю файл server.key, я бачу, що він починається з "----- НАЧАТИ ПРИВАТНИЙ КЛЮЧ -----"

Я використовую сервер SSL на своєму сервері, і все виглядає нормально.

Тепер я хочу завантажити той самий сертифікат до AWS IAM, щоб я міг використовувати його для балансування навантаження beanstalk. Я використовую таку команду з цього 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 Недійсний приватний ключ."

Цікаво те, що на сторінці aws doc зразок закритого ключа, який вони показують, починається з "------- Почати приватний ключ RSA --------"

Чи є спосіб перетворити мій приватний ключ в приватний ключ RSA за допомогою openssl?

Відповіді:


155

Новіші версії 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 з тим самим ключем працює.
Даніель

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

1
як ми робимо протилежне цьому? Мені потрібно Private Keyз RSA Private Key?
edthethird

1
openssl pkcs8 -topk8 -nocrypt -in privkey.pemнапише PKCS8 до STDOUT
Пол Керер,

24

Це може допомогти (буквально не виписуйте зворотні скісні риски '\' у командах, вони повинні означати, що "все повинно бути в одному рядку"):

Яку команду застосувати, коли

Здається, що всі команди (сірим кольором) приймають будь-який тип файлу ключів (зеленого кольору) як аргумент «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 ) можна знайти тут
Девід Тонхофер

8

Перетворити "ПОЧАТОК ПРИВАТНОГО КЛЮЧА"

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

Це саме те, що мені потрібно було. Дякую!
RossD

Ця поведінка зафіксовано опосередковано на веб-сторінці ssh-keygen, але використання прапора -m насправді не згадується для інших режимів роботи, крім -i та -o
ikrabbe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.