Låt oss säga att jag har tillgång till den privata delen av ett RSA-nyckelpar. Hur kan jag kontrollera om den här nyckeln har tillhörande lösenfras eller inte?
Låt oss säga att jag har tillgång till den privata delen av ett RSA-nyckelpar. Hur kan jag kontrollera om den här nyckeln har tillhörande lösenfras eller inte?
Nyckelfilen har en annan rubrik om den är lösenordsskyddad. Här är toppen av en nyckel utan lösenfras:
----- BEGIN RSA PRIVATE KEY ----- MIIEogIBAAKCAQEA3qKD / 4PAc6PMb1yCckTduFl5fA1OpURLR5Z + T4xY1JQt3eTM
----- BEGIN RSA PRIVATE KEY ----- Proc-Type: 4, ENCRYPTEDDEK-Info: DES-EDE3 -CBC, 556C1115CDA822F5AHi / 3 ++ 6PEIBv4kfpM57McyoSAAaT2ECxNOA5DRKxJQ9pr2D3aUeMBaBfWGrxd / Q
Tyvärr fungerar det bara när man tittar på filerna. Jag vet inget sätt för en server att kunna berätta om nycklarna som presenteras för den var skyddade med en lösenfras, vilket är den mest användbara platsen för att kunna utnyttja den typen av information.
Det är inte alltid så enkelt som beskrivs i de andra svaren. Det fungerar bara med de gamla PEM-tangenterna. Ny openssh
-format för tangenterna (genereras med alternativet -o
, säkrare, eftersom openssh-6.5) ser likadant ut om du markerar rubrikerna:
$ huvudet rsa_enc ----- BEGIN OpenSSH privata nyckel ----- b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABCYdi7MhY $ huvudet rsa ----- BEGIN OpenSSH privata nyckel ----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
Det enklaste sättet i det här fallet är att köra någon operation på dem med ssh-keygen
. Om den frågar efter en lösenfras har den en ( eller det är inte en ssh-nyckel), om den inte har en lösenfras:
$ ssh- keygen -yf rsa_encEnter lösenfras: $ ssh-keygen -yf rsassh-rsa AAAAB3NzaC1y ...
Kanske ännu bättre är följande exempel, eftersom det inte ber om inmatning :-P specificerar lösenfrasen som ska användas, en oskyddad nyckel öppnas med en tom lösenfras.
$ ssh-keygen -y -P "" -f rsa_encLoad key "path_to_key": felaktig lösenfras tillhandahålls för att dekryptera privat nyckel " $ ssh-keygen -y -P "" -f rsassh-rsa AAAAB3NzaC1y ...
"RSA-nyckeln" är faktiskt en uppsättning värden som är lagrade som en ASN.1-struktur i det standardiserade DER-binära formatet och kodas sedan i bas-64 för att få den slutliga PEM-filen.
En mycket enkelt sätt att avgöra om en nyckel är kodad eller inte är helt enkelt att kontrollera om ASN.1-rubriken är närvarande, och detta är vanligtvis lika enkelt som att kontrollera om "nyckeln" börjar med bokstäverna
----- BEGIN RSA PRIVATE KEY -----
MII CWwIBAAKBgQCWxk9djtgA / t7n6M8g1d2fk3exyCSu1uubpxUkoFLJBKjLYiaa
[ ...]
eCrpRFHxhPICHI4db + I8GZ9QDmlbCN / bl3BBNNTn3w ==
----- SLUT RSA PRIVATE KEY -----
I lösenordsskyddade filer , eftersom hela ASN.1-strukturen är krypterad, visas allt som slumpmässiga tecken.
Privata nycklar ska skyddas, försöker ställa in lösenordet förklarar bara om det ännu är lösenordsskyddat. Med ssh-keygen
på den skyddade nyckeln:
~ / .ssh $ ssh-keygen -p -f id_rsa_password_protected Ange gammal lösenfras:
Och med inte skyddad:
~ / .ssh $ ssh-keygen -p -f id_rsa_not_protected Ange ny lösenfras (tom utan lösenfras):
Så om det inte är lösenordsskyddat, bara ställ in lösenordet .