Domanda

Penso che so come creare chiavi RSA crittografate personalizzate, ma come posso leggere una crittografata come fa ssh-keygen?

So di poterlo fare:

OpenSSL::PKey::RSA.new(File.read('private_key'))

Ma poi OpenSSL mi chiede la passphrase ... Come posso passarla a OpenSSL come parametro?

E come posso crearne uno compatibile con quelli generati da ssh-keygen?

Faccio qualcosa del genere per creare chiavi crittografate private:

pass = '123456'
key = OpenSSL::PKey::RSA.new(1024)
key = "0000000000000000#{key.to_der}"
c = OpenSSL::Cipher::Cipher.new('aes-256-cbc')
c.encrypt
c.key = Digest::SHA1.hexdigest(pass).unpack('a2' * 32).map {|x| x.hex}.pack('c' * 32)
c.iv = iv
encrypted_key = c.update(key)
encrypted_key << c.final

Inoltre, le chiavi generate da OpenSSL :: PKey :: RSA.new (1024) (senza crittografia), non funzionano quando provo accessi senza password (ovvero copio la chiave pubblica sul server e utilizzo il uno privato per accedere).

Inoltre, quando apro un file ssh-keygen tramite OpenSSL e ne controllo il contenuto, sembra che abbia caratteri aggiuntivi all'inizio e alla fine della chiave. È normale?

Non capisco davvero alcune di queste cose di sicurezza, ma sto cercando di imparare. Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione 2

Ho fatto alcuni progressi su questo. Se uso la libreria Net :: SSH, posso farlo:

Net::SSH::KeyFactory.load_private_key 'keyfile', 'passphrase'

Leggendo il codice sorgente devo ancora capire cosa fa la libreria a PKey :: RSA. di OpenSSL per farlo ... E poi vado e testo di nuovo, e abbastanza sicuro, OpenSSL può aprire la chiave privata bene senza Net :: SSH ... Ho fatto così tanti test che in qualche modo non l'ho provato correttamente prima.

Ma ho ancora il problema di creare una coppia di chiavi compatibile con SSH ... e forse andrò di nuovo al test e avrò la risposta: P ... nah, non sono così interessato a quella parte

Altri suggerimenti

Secondo il post del blog qui:

http : //stuff-things.net/2008/02/05/encrypting-lots-of-sensitive-data-with-ruby-on-rails/

Puoi semplicemente fare:

OpenSSL :: PKey :: RSA.new (File.read ('private_key'), 'passphrase')

Buona fortuna.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top