Domanda

Voglio fare quello che fa myopenid: una volta effettuato l'accesso, puoi fare clic su un pulsante che genera un certificato SSL;il browser quindi scarica questo certificato e lo memorizza.Quando successivamente torni su yourid.myopenid.com, il tuo browser può utilizzare il certificato memorizzato per l'autenticazione, quindi non avrai mai bisogno di una password.

Quindi la mia domanda è: cosa è necessario per farlo funzionare?Come posso generare i certificati?Come posso convalidarli una volta che mi vengono presentati?

Il mio stack è Rails su Apache utilizzando Passenger, ma non sono troppo particolare.

È stato utile?

Soluzione

Questi sono solitamente indicati come certificati lato client.

In realtà non l'ho usato, ma una versione modificata di restful-authentication può essere trovata qui Qui sembra proprio quello che cerchi.

L'ho trovato tramite Dott.Il post di Nic

Altri suggerimenti

Dipende dal server, ma la soluzione più semplice che conosco, utilizzando Apache:

FakeBasicAuth

"Quando questa opzione è abilitata, il nome distinto soggetto (DN) del certificato client X509 viene convertito in un nome utente di autorizzazione di base HTTP.Ciò significa che i metodi di autenticazione standard di Apache possono essere utilizzati per il controllo degli accessi.Il nome utente è solo l'oggetto del certificato X509 del client (può essere determinato eseguendo il comando openssl x509 di OpenSSL:openssl x509 -noout -subject -in certificate.crt).Tieni presente che nessuna password viene ottenuta dall'utente..."

Non sono sicuro dei binari, ma la solita variabile d'ambiente REMOTE_USER dovrebbe essere accessibile in qualche modo.

Se vuoi generare certificati, devi fare in modo che il client generi una coppia di chiavi e ti invii almeno la chiave pubblica.Puoi farlo in Firefox tramite una chiamata Javascript, it's crypto.generateCRMFRequest.Immagino che ci siano metodi specifici del browser disponibili anche in altri browser.Ma prima devi capire come emettere un certificato una volta ottenuta una chiave pubblica.

Potresti scrivere qualcosa sul server con OpenSSL, ma ha il supporto integrato per i CSR, non il formato CRMF che Firefox ti invierà.Quindi dovresti scrivere del codice per convertire il CRMF in un CSR, il che richiederà una sorta di capacità di elaborazione DER... Sto solo grattando la superficie qui: gestire una CA, anche per un'applicazione giocattolo, non è banale.

Le soluzioni SSO come OpenId e le soluzioni PKI si sovrappongono e c'è un'eleganza nella PKI.Ma il diavolo sta nei dettagli, e ci sono buone ragioni per cui questo approccio esiste da molto tempo ma ha preso piede solo in applicazioni governative e militari.

Se sei interessato a perseguire questo obiettivo, rispondi ad alcune domande specifiche sulla piattaforma su cui vorresti sviluppare il tuo servizio CA.

È possibile generare un certificato nel browser del client utilizzando il codice specifico del browser.Vedere questa domanda

Puoi anche generare certificati client SSL lato server utilizzando OpenSSL in Ruby (vedi questo q).(Funzionerà con qualsiasi browser senza codice specifico del browser, ma il tuo server avrà generato la chiave privata del client, il che non è l'ideale per i puristi della crittografia.)

Qualunque sia il metodo utilizzato per generarli, dovrai quindi configurare il tuo server web per richiedere i certificati client.Vedere i documenti Apache per un esempio.

Ho lavorato su una soluzione a questo problema.Volevo fare la stessa cosa e so che molti altri proprietari di siti web desiderano questa funzionalità, con o senza un fornitore di terze parti.

Ho creato la configurazione del server necessaria e un plug-in Firefox per gestire l'autenticazione basata su certificato.Vai su mypassfree.com per prendere il plugin gratuito per Firefox.Inviami un'e-mail (link su quella pagina) per la configurazione del server poiché non l'ho ancora confezionato con un simpatico programma di installazione.

La configurazione del server è Apache2 + OpenSSL + Perl (ma potresti riscrivere gli script Perl in qualsiasi lingua)

Jonathan

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