Mam problem z generowaniem klucza publicznego, który PEM_read_bio_RSA_PUBKEY()
może zużywać funkcja openssl . Wciąż pojawiają się błędy.
Oczywiście nie mogę po prostu użyć ciągu ASCII w ssh-keygen <>.pub
pliku klucza, ponieważ jest on w formacie pliku SSH, lub może SubjectPublicKeyInfo
struktury.
Oto kluczowy kod genowy: ssh-keygen -t rsa -b 1024 -C "Test Key"
W sieci znalazłem konwerter php, który przekonwertuje zawartość klucza publicznego na format łańcucha PEM ASCII base64. Jednak funkcja wciąż jej nie lubi.
Dokumentacja openssl stwierdza:
- „Funkcja RSA_PUBKEY () przetwarzająca klucz publiczny przy użyciu struktury EVP_PKEY”
- „Funkcje RSA_PUBKEY przetwarzają również klucz publiczny RSA przy użyciu struktury RSA”
Jak uzyskać klucz publiczny OpenSSH w dowolnym formacie, który będzie wykorzystywał funkcja OpenSSL?
Odpowiedzi:
DOBRZE!
Więc zacząłem myśleć: „Spokojnie, mam to”. Okazuje się, że jest o wiele więcej niż myślałem.
Pierwszym problemem jest to, że (według stron podręcznika OpenSSL (man 3 pem)) OpenSSL oczekuje, że klucz RSA będzie w formacie PKCS # 1. Najwyraźniej nie z tym współpracuje ssh-keygen. Masz dwie opcje (od przeszukiwania).
Jeśli masz OpenSSH w wersji 5.6 lub nowszej (nie miałem na swoim laptopie), możesz uruchomić to:
Dłuższą metodą na to jest rozbicie klucza SSH na różne komponenty ( wpis na blogu, który znalazłem trochę w tym, że oskarża OpenSSH o bycie „zastrzeżonym”, wolę nazywać go „unikalnym”), a następnie użyć biblioteki ASN1 zamieniać rzeczy.
Na szczęście dla ciebie ktoś napisał kod, aby to zrobić:
https://gist.github.com/1024558
źródło
ssh-keygen
Metoda wydaje się działać na Linuksie, ale nie w systemie Mac OS X.ssh -V
.OpenSSH_6.2p2
. Działa wOpenSSH_6.6p1
.-m
nie działa dla mnie ... co to za praca?Zakładając, że masz klucz prywatny SSH
id_rsa
, możesz wyodrębnić z niego klucz publiczny w następujący sposób:Zdaję sobie sprawę, że OP poprosił o konwersję klucza publicznego, więc to nie do końca odpowiada na pytanie, ale pomyślałem, że i tak będzie użyteczne dla niektórych.
Należy również zauważyć, że polecenie to powoduje utworzenie klucza publicznego PEM, czego generalnie oczekuje OpenSSL. Z drugiej strony odpowiedź Briana prowadzi do pliku w formacie RSAPublicKey, który nie jest normalnym formatem oczekiwanym przez OpenSSL (chociaż późniejsze wersje mogą go odczytać za pomocą
-RSAPublicKey_in
flagi). Aby przekonwertować, możesz to zrobić:źródło
openssl rsa -in id_rsa.pem -pubout -out id_rsa.pub.pem
również działają (tzn. wejście jest kluczem prywatnym w formacie pem). Dobra odpowiedź.-m pkcs8
której mimo OpenSSH ludzi stosujących niewłaściwą nazwę ma produkować X.509 „pubkey”. Ponadto, ponieważ OpenSSH 6.5 w wersji 2014-01, jeśli twórca określił „nowy format”-o
dla lepszego bezpieczeństwa, ta metoda nie będzie działać, a od 7,8 w sezonie 2018-08 „nowy format” jest teraz domyślny, podobnie.Wymagany format to to, co
ssh-keygen
wywołujePKCS8
. Tak więc następujące polecenie wygeneruje pożądany wynik:Ze strony podręcznika
ssh-keygen
:źródło
Podobnie jak w poniższej metodzie Amala Chaudhuriego, to zadziałało dla mnie. Musiałem utworzyć plik pem z klucza publicznego ssh, który wygenerowałem dla mojego klienta SFTP (Cyberduck).
źródło
id_rsa
jest już w odpowiednim formacie, możesz to sprawdzić sam, wynikid_rsa.pem
jest w 100% identyczny.Inny sposób na zrobienie tego z innej strony. Publikowanie tego w przypadku, gdy potrzebujesz innej metody. Działa bardzo dobrze http://www.chatur.com.np/2011/01/convert-openssh-rsa-key-to-pem-format.html
źródło
id_rsa
nie jest kluczem publicznym. Zła odpowiedź.