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?

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

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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.