Come impostare OpenSSH per utilizzare PKI x509 per l'autenticazione?

34

Non intendo semplicemente mettere la chiave RSA pubblica di un certificato x.509 in ~/.ssh/authorized_keys - Sto cercando un modo per impostare un ssh in modo tale che i certificati x.509 firmati da una CA predefinita viene automaticamente concesso l'accesso all'account utente collegato. RFC 6187 sembra suggerire tale funzionalità, ma non riesco a trovare alcuna documentazione su questo, o se è implementata in OpenSSH a tutti.

Ecco una descrizione più elaborata di ciò che voglio fare:

  • Una CA ("SSH-CA") è impostata
  • Questa CA viene utilizzata per firmare i certificati utente con keyUsage=digitalSignature (e forse il campo id-kp-secureShellClient extendedKeyUsage)
  • Questo certificato può ora essere utilizzato per accedere su un server. Il server non richiede che la chiave pubblica sia presente in authorized_keys . Invece, è impostato per affidarsi alla SSH-CA per verificare la chiave pubblica e la firma del certificato (o catena di certificati) e il nome utente / UID (probabilmente direttamente nel campo subjectAltName , o magari usando qualche mappatura sul lato server ) prima che venga eseguita la normale autenticazione RSA

Quindi, (come) questo può essere ottenuto con OpenSSH, e se richiede una patch, come possono essere minimizzate le modifiche sul lato client?

In alternativa suppongo che si possa usare anche qualsiasi certificato S / MIME più un nome utente per mappare l'indirizzo e-mail, senza richiedere una propria CA. Il client potrebbe anche utilizzare ancora solo la chiave RSA privata e viene utilizzato un server di certificazione ottenere un certificato da una chiave pubblica, offrendo inoltre la possibilità di utilizzare anche i certificati PGP (ad esempio tramite monkeysphere ) senza che l'utente abbia bisogno di alcuna conoscenza su tutto questo purché fornisca semplicemente una chiave pubblica.

Se non è nativamente possibile, immagino che potrei arrivare a una "implementazione" semi-automatica lasciando che uno script sul server controlli automaticamente un certificato inviato in qualche modo tramite openssl (o gnupg ) e inserire la chiave pubblica nel file authorized_keys del rispettivo utente - sebbene a quel punto io am probabilmente più o meno rifai il progetto monkeyshere ...

    
posta Tobias Kienzler 06.02.2013 - 17:45
fonte

2 risposte

25

OpenSSH non supporta ufficialmente l'autenticazione basata su certificato x.509:

The developers have maintained a stance that the complexity of X.509 certificates introduces an unacceptable attack surface for sshd. Instead, they have [recently] implemented an alternative certificate format which is much simpler to parse and thus introduces less risk.

...

OpenSSH just uses the low-level cryptographic algorithms from OpenSSL.

Tuttavia Roumen Petrov pubblica build OpenSSH che includono il supporto X.509 e potresti provare con quelle.

X.509 certificates can [be] used as "user identity" and/or "host key" in SSH "Public Key" and "Host-Based" authentications.

Le versioni di Roumen Petrov possono essere scaricate tramite questa pagina .

Ecco un how-to su Debian per SSH con chiave di autenticazione anziché password che potrebbe rivelarsi utile anche nell'impostazione su OpenSSH per accettare PKI x509 per l'autenticazione dell'utente.

    
risposta data 06.02.2013 - 18:43
fonte
19

L'autenticazione basata su certificato nativo è disponibile in OpenSSH upstream non modificato. Tuttavia, non è basato su x.509.

Innanzitutto, genera la CA:

ssh-keygen -f ssh-ca

Successivamente, installa la tua chiave CA in .authorized_keys con un prefisso cert-authority :

echo "cert-authority $(<ssh-ca.pub)" >>.ssh/authorized_keys

Da quel momento, ogni volta che una chiave viene generata da un utente:

ssh-keygen -f real-key

... la porzione pubblica può essere firmata dalla tua CA SSH, dopodiché verrà considerata attendibile dal server senza che la stessa chiave venga aggiunta a authorized_keys :

ssh-keygen -s ssh-ca -I identifier_for_your_real_key_goes_here real-key.pub
    
risposta data 08.10.2014 - 23:27
fonte

Leggi altre domande sui tag