Как преобразовать закрытый ключ в закрытый ключ RSA?

98

Позвольте мне сначала пояснить свой вопрос. Я купил сертификат в ЦС и использовал следующий формат для создания csr и закрытого ключа:

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

Когда я открываю файл server.key, я вижу, что он начинается с "----- BEGIN PRIVATE KEY -----"

Я использую сертификат SSL на своем сервере, и все выглядит нормально.

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

Есть ли способ преобразовать мой закрытый ключ в закрытый ключ RSA с помощью openssl?

Тихий пользователь
источник

Ответы:

156

Более новые версии 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 08
2
как нам сделать обратное? Мне нужна Private Keyот а RSA Private Key?
edthethird
2
openssl pkcs8 -topk8 -nocrypt -in privkey.pemнапишет PKCS8 в STDOUT
Пауль Керер
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 ) можно найти здесь
Дэвид Тонхофер
12

Чтобы преобразовать «BEGIN OPENSSH PRIVATE KEY» в «BEGIN RSA PRIVATE KEY»

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
Ахирапара
источник
1
Это именно то, что мне нужно. Благодарность!
RossD
Это поведение косвенно задокументировано на странице руководства ssh-keygen, но использование флага -m фактически не упоминается для других режимов работы, кроме -i и -o
ikrabbe