Ssh-keygen ortak anahtarını PEM_read_bio_RSA_PUBKEY () işlevinin kullanacağı bir formata nasıl dönüştürebilirim?


49

Openssl PEM_read_bio_RSA_PUBKEY()işlevinin tüketebileceği ortak bir anahtar oluşturma konusunda sorun yaşıyorum . Hata alıyorum.

Açıkçası, ASCII dizesini ssh-keygen <>.pubSSH dosya biçiminde olduğu gibi anahtar dosyada da kullanamıyorum ya da belki yapıyorum SubjectPublicKeyInfo.

İşte anahtar gen kodu: ssh-keygen -t rsa -b 1024 -C "Test Key"

Genel anahtarın içeriğini base64 PEM ASCII string biçimine dönüştürecek olan web üzerinde php'de bir dönüştürücü buldum. Ancak, işlev hala onu sevmiyor.

Openssl belgelendirmesi:

  1. “EVP_PKEY yapısını kullanarak genel anahtarı işleyen RSA_PUBKEY () işlevi”
  2. “RSA_PUBKEY işlevleri ayrıca bir RSA yapısı kullanarak bir RSA ortak anahtarını işliyor”

OpenSSH ortak anahtarımı, OpenSSL işlevinin onu kullanacağı herhangi bir biçimde nasıl alabilirim?


Bunu
anladım

Özel anahtar oluştur: openssl genrsa -out test.priv.key 2048; Genel anahtar aynı formatta (PEM?) Çıktı: openssl rsa -in test.priv.key -pubout -out test.pub.key
PeteP

Yanıtlar:


56

TAMAM!

Ben de bu düşünceye girdim "Kolay, bunu anladım." Düşündüğümden bile daha fazlası var.

Bu yüzden ilk konu şudur (OpenSSL'in man sayfalarına göre (man 3 pem)), OpenSSL RSA anahtarının PKCS # 1 formatında olmasını beklemektedir. Açıkçası ssh-keygen'in çalıştığı şey bu değil. İki seçeneğiniz var (arama yapmaktan).

OpenSSH v. 5.6 veya üstü bir sürüm kullanıyorsanız (dizüstü bilgisayarımda kullanmadım), şunu çalıştırabilirsiniz:

ssh-keygen -f key.pub -e -m pem

Çeşitli bileşenleri var içine bunu yapmanın daha uzun yöntemi SSH anahtarı parçalayın etmektir ( blog girişi ve daha sonra bir ASN1 kütüphane kullanımı bu in bazı "özel" olmakla OpenSSH suçluyor buldum, ben "benzersiz" demeyi tercih) etrafta bir şeyleri değiştirmek için.

Neyse ki, sizin için biri bunu yapmak için kodu yazdı:

https://gist.github.com/1024558


9
ssh-keygenYöntem ancak Linux üzerinde çalışmak gibi görünüyor değil Mac OS X
kapak

3
Kapak, SSH versiyonu ile ilgili cevaba bakınız. OS X, OpenSSH'nin yeni bir versiyonunu sunmuyor. Komutu çalıştır ssh -V.
Brian Redbeard

3
Çalışmaz OpenSSH_6.2p2. İçeride çalışıyor OpenSSH_6.6p1.
Eski Pro

-mbenim için çalışmıyor ... etrafta ne işe yarıyor?
pstanton

2
Mac'te benim için çalışıyor!
Greg Hornby

18

SSH özel anahtarınız olduğunu varsayarsak id_rsa, genel anahtarı bu şekilde çıkarabilirsiniz:

openssl rsa -in id_rsa -pubout -out id_rsa.pub.pem

OP'nin bir kamu anahtarını dönüştürmek istediğini anlıyorum, bu yüzden soruyu tam olarak cevaplamıyor, ancak yine de bazılarına yararlı olacağını düşündüm.

Ayrıca bu komutun, genellikle OpenSSL'nin beklediği PEM açık anahtar biçiminde sonuçlandığını unutmayın. Öte yandan, Brian’ın cevabı, OpenSSL’in beklediği normal bir format olmayan RSAPublicKey formatındaki bir dosyaya yol açıyor (daha sonraki sürümlerin görünüşe göre -RSAPublicKey_inbayraktan okuyabiliyor ). Dönüştürmek için bunu yapabilirsiniz:

openssl rsa -RSAPublicKey_in -in id_rsa.rsapub.pem -pubout -out id_rsa.pub.pem

Teşekkürler, özel anahtara ait olan yayın benim için hile yaptı.
Shaun Dewberry

openssl rsa -in id_rsa.pem -pubout -out id_rsa.pub.pemayrıca çalışır (yani giriş pem biçiminde özel anahtardır). İyi cevap.
Johnny Wong

1
Güncelleme: Brian'ın cevabı için düzeltilmiştir -m pkcs8hangi yanlış adını kullanarak OpenSSH millet rağmen mu X.509 'pubkey' üretirler. Ayrıca, 2014-01’de OpenSSH 6.5’ten -odaha iyi güvenlik için 'yeni format' belirlenirse , bu yöntem işe yaramaz ve 2018-08’de 'yeni format' da 7.8’den beri şimdi varsayılandır.
dave_thompson_085

11

İstediğiniz format ne ssh-keygençağırıyor PKCS8. Böylece, aşağıdaki komut istenen çıktıyı üretecektir:

ssh-keygen -f key.pub -e -m pkcs8

Gönderen ssh-keygenadam sayfası:

-m key_format
         Specify a key format for the -i (import) or -e (export) conversion 
         options.  The supported key formats are: 
         ``RFC4716'' (RFC 4716/SSH2 public or private key), 
         ``PKCS8'' (PEM PKCS8 public key) or 
         ``PEM'' (PEM public key).  
         The default conversion format is ``RFC4716''.

Bu aslında hem Linux hem de MacOS'ta çalışıyor.
Jay Taylor

OpenSSL'deki özel anahtardan eşdeğer oluşturulan ortak anahtarın çıkarılması için openssl rsa -in anahtarında -pubout -out key.pub.openssl.pkcs8
Mohannd

6

Amal Chaudhuri'nin aşağıdaki yöntemine benzer şekilde, bu benim için çalıştı. SFTP istemcim (Cyberduck) için oluşturduğum ssh public anahtarından bir pem dosyası oluşturmam gerekiyordu.

openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem

Bu aslında işe görünmüyor.
dışında2344

5
Bu SADECE özel RSA anahtarı için çalışıyor, OP kamu anahtarını sormuyor. Yani yanlış cevap.
Devy

3
Aslında, id_rsazaten doğru formatta, kendiniz kontrol edebilirsiniz, sonuç id_rsa.pem% 100 aynıdır.
Miro Kropacek

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.