Jak przekonwertować klucz prywatny na klucz prywatny RSA?

97

Pozwól mi najpierw wyjaśnić moje pytanie. Kupiłem certyfikat od CA i użyłem następującego formatu do wygenerowania csr i klucza prywatnego:

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

Kiedy otwieram plik server.key, widzę, że zaczyna się od „----- BEGIN PRIVATE KEY -----”

Używam certyfikatu SSL na moim serwerze i wszystko wygląda dobrze.

Teraz chcę przesłać ten sam certyfikat do AWS IAM, aby móc go użyć do równoważenia obciążenia łodygi fasoli. Używam następującego polecenia z tego dokumentu 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

Zmieniam nazwy plików certyfikatów zgodnie z wymaganiami, ale ciągle pojawia się ten błąd: „400 MalformedCertificate Invalid Private Key”.

Ciekawostką jest to, że na stronie dokumentu aws pokazany przykładowy klucz prywatny zaczyna się od „------- Rozpocznij klucz prywatny RSA --------”

Czy istnieje sposób na przekonwertowanie mojego klucza prywatnego na klucz prywatny RSA przy użyciu openssl?

Cichy użytkownik
źródło

Odpowiedzi:

156

Nowsze wersje OpenSSL mówią, BEGIN PRIVATE KEYponieważ zawierają klucz prywatny + OID, który identyfikuje typ klucza (jest to znany jako format PKCS8). Aby uzyskać stary klucz (znany jako PKCS1 lub tradycyjny format OpenSSL), możesz to zrobić:

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

Alternatywnie, jeśli masz klucz PKCS1 i chcesz PKCS8:

openssl pkcs8 -topk8 -nocrypt -in privkey.pem
Paul Kehrer
źródło
1
Jest to również rozwiązanie pozwalające na otrzymywanie dziwnych komunikatów o błędach, takich jak Invalid PEM structure, '-----BEGIN...' missing.narzędzia takie jak Cyberduck, podczas gdy czysty SSH z tym samym kluczem działa.
Daniel,
1
Dziękuję Ci! Otrzymałem A client error (MalformedCertificate) occurred when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.i uruchomiłem to na moim kluczu prywatnym, naprawiłem to!
philfreo
4
Dla odniesienia: zobacz stackoverflow.com/q/20065304/53974, aby uzyskać pełniejsze wyjaśnienie.
Blaisorblade,
2
jak zrobimy coś przeciwnego? Potrzebuję Private Keyod RSA Private Key?
edthethird
2
openssl pkcs8 -topk8 -nocrypt -in privkey.pemzapisze PKCS8 do STDOUT
Paul Kehrer
26

Może to trochę pomóc (nie zapisuj dosłownie odwrotnych ukośników „\” w poleceniach, mają one wskazywać, że „wszystko musi znajdować się w jednej linii”):

Które polecenie zastosować i kiedy

Wygląda na to, że wszystkie polecenia (na szaro) przyjmują dowolny typ pliku klucza (na zielono) jako argument „in”. Co jest miłe.

Oto ponownie polecenia ułatwiające kopiowanie i wklejanie:

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

i

openssl rsa -check -in $FF
openssl rsa -text  -in $FF
David Tonhofer
źródło
1
Plik „graphml” obrazu (który można edytować na przykład za pomocą yworks yed ) można znaleźć tutaj
David Tonhofer,
11

Aby przekonwertować „BEGIN OPENSSH PRIVATE KEY” na „BEGIN RSA PRIVATE KEY”

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
ahirapara
źródło
1
Właśnie tego potrzebowałem. Dzięki!
RossD,
To zachowanie jest udokumentowane pośrednio na stronie podręcznika ssh-keygen, ale użycie flagi -m w rzeczywistości nie jest wspominane dla innych trybów pracy niż -i i -o
ikrabbe