Autenticazione a due fattori sul sito tramite token USB. Ora anche per Linux

Autenticazione a due fattori sul sito tramite token USB. Ora anche per Linux
В uno dei nostri articoli precedenti abbiamo parlato dell'importanza dell'autenticazione a due fattori sui portali aziendali delle aziende. L'ultima volta abbiamo dimostrato come impostare l'autenticazione sicura nel server web IIS.

Nei commenti ci è stato chiesto di scrivere le istruzioni per i server Web più comuni per Linux: nginx e Apache.

Hai chiesto - abbiamo scritto.

di cosa hai bisogno per iniziare?

  • Qualsiasi distribuzione Linux moderna. Ho eseguito una configurazione di prova su MX Linux 18.2_x64. Ovviamente questa non è una distribuzione server, ma è improbabile che ci siano differenze per Debian. Per altre distribuzioni, i percorsi delle librerie di configurazione possono variare leggermente.
  • Gettone. Continuiamo a utilizzare il modello Rutoken EDS PKI, che è ideale in termini di caratteristiche di velocità per uso aziendale.
  • Per lavorare con un token in Linux, è necessario installare i seguenti pacchetti:
    libccid libpcsclite1 pcscd pcsc-tools opensc

Autenticazione a due fattori sul sito tramite token USB. Ora anche per Linux

Emissione certificati

Negli articoli precedenti abbiamo fatto affidamento sul fatto che i certificati server e client verranno emessi tramite Microsoft CA. Ma poiché stiamo configurando tutto in Linux, ti parleremo anche di un modo alternativo per emettere questi certificati, senza uscire da Linux.
Useremo XCA come CA (https://hohnstaedt.de/xca/), disponibile su qualsiasi distribuzione Linux moderna. Tutte le azioni che eseguiremo in XCA possono essere eseguite in modalità riga di comando utilizzando le utilità OpenSSL e pkcs11-tool, ma per maggiore semplicità e chiarezza non le presenteremo in questo articolo.

Guida introduttiva

  1. Installare:
    $ apt-get install xca
  2. E corriamo:
    $ xca
  3. Creiamo il nostro database per CA - /root/CA.xdb
    Si consiglia di archiviare il database dell'autorità di certificazione in una cartella a cui ha accesso solo l'amministratore. Ciò è importante per proteggere le chiavi private dei certificati root, che vengono utilizzati per firmare tutti gli altri certificati.

Crea chiavi e certificato CA radice

Un'infrastruttura a chiave pubblica (PKI) si basa su un sistema gerarchico. La cosa principale in questo sistema è l'autorità di certificazione radice o CA radice. Il relativo certificato deve essere prima creato.

  1. Creiamo una chiave privata RSA-2048 per la CA. Per fare ciò, nella scheda Chiavi private spingere Nuova chiave e seleziona il tipo appropriato.
  2. Imposta un nome per la nuova coppia di chiavi. L'ho chiamato chiave CA.
  3. Emettiamo il certificato CA stesso, utilizzando la coppia di chiavi creata. Per fare ciò, vai alla scheda Certificati e spingere Nuovo certificato.
  4. Assicurati di scegliere SHA-256, perché l'utilizzo di SHA-1 non può più essere considerato sicuro.
  5. Assicurati di scegliere come modello [predefinito]CA. Non dimenticare di fare clic su Applicare tutte, altrimenti il ​​modello non viene applicato.
  6. linguetta Oggetto scegli la nostra coppia di chiavi. Lì puoi compilare tutti i campi principali del certificato.

Autenticazione a due fattori sul sito tramite token USB. Ora anche per Linux

Creazione di chiavi e di un certificato del server https

  1. In modo simile, creiamo una chiave privata RSA-2048 per il server, l'ho chiamata Server Key.
  2. Quando creiamo un certificato, selezioniamo che il certificato del server debba essere firmato con un certificato CA.
  3. Non dimenticare di selezionare SHA-256.
  4. Scegliamo come modello [predefinito] server_HTTPS. Clicca su Applicare tutte.
  5. Quindi sulla scheda Oggetto seleziona la nostra chiave e compila i campi richiesti.

Autenticazione a due fattori sul sito tramite token USB. Ora anche per Linux

Creare chiavi e certificato per l'utente

  1. La chiave privata dell'utente verrà archiviata sul nostro token. Per utilizzarlo, è necessario installare la libreria PKCS#11 dal nostro sito web. Per le distribuzioni più diffuse, distribuiamo pacchetti già pronti, che si trovano qui - https://www.rutoken.ru/support/download/pkcs/. Abbiamo anche assembly per arm64, armv7el, armv7hf, e2k, mipso32el, che possono essere scaricati dal nostro SDK - https://www.rutoken.ru/developers/sdk/. Oltre agli assembly per Linux, esistono anche assembly per macOS, freebsd e Android.
  2. Aggiunta di un nuovo provider PKCS#11 a XCA. Per fare ciò, vai al menu Opzioni alla scheda Fornitore PKCS#11.
  3. ? Aggiungi e seleziona il percorso della libreria PKCS#11. Nel mio caso è usrliblibrtpkcs11ecp.so.
  4. Avremo bisogno di un token PKI Rutoken EDS formattato. Scarica l'utilità rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Effettuiamo
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. Selezioniamo la chiave RSA-2048 per Rutoken EDS PKI come tipo di chiave. Ho chiamato questa chiave Chiave Cliente.

    Autenticazione a due fattori sul sito tramite token USB. Ora anche per Linux

  7. Inserisci il codice PIN. E aspettiamo il completamento della generazione hardware della coppia di chiavi

    Autenticazione a due fattori sul sito tramite token USB. Ora anche per Linux

  8. Creiamo un certificato per l'utente per analogia con il certificato del server. Questa volta selezioniamo un modello [predefinito] HTTPS_client e non dimenticare di fare clic Applicare tutte.
  9. linguetta Oggetto inserire le informazioni sull'utente. Rispondiamo affermativamente alla richiesta di salvare il certificato per il token.

Di conseguenza, nella scheda Certificati in XCA dovresti ottenere qualcosa di simile.

Autenticazione a due fattori sul sito tramite token USB. Ora anche per Linux
Questo set minimo di chiavi e certificati è sufficiente per iniziare a configurare i server stessi.

Per configurare, dobbiamo esportare il certificato CA, il certificato del server e la chiave privata del server.

A tale scopo selezionare la voce desiderata nella scheda corrispondente in XCA e fare clic Esportare.

Nginx

Non scriverò come installare ed eseguire un server nginx: ci sono abbastanza articoli su questo argomento su Internet, per non parlare della documentazione ufficiale. Andiamo direttamente alla configurazione di HTTPS e dell'autenticazione a due fattori utilizzando un token.

Aggiungi le seguenti righe alla sezione server in nginx.conf:

server {
	listen 443 ssl;
	ssl_verify_depth 1;
	ssl_certificate /etc/nginx/Server.crt;
	ssl_certificate_key /etc/nginx/ServerKey.pem;
	ssl_client_certificate /etc/nginx/CA.crt;
	ssl_verify_client on;
}

Una descrizione dettagliata di tutti i parametri relativi alla configurazione di SSL in nginx può essere trovata qui - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Mi limiterò a descrivere brevemente quelli che mi sono chiesto:

  • ssl_verify_client: specifica che la catena di fiducia per il certificato deve essere verificata.
  • ssl_verify_length: definisce la profondità di ricerca per il certificato radice attendibile nella catena. Poiché il nostro certificato client viene firmato immediatamente sul certificato radice, la profondità è impostata su 1. Se il certificato utente è firmato su una CA intermedia, è necessario specificare 2 in questo parametro e così via.
  • ssl_client_certificate: specifica il percorso del certificato radice attendibile, che viene utilizzato durante la verifica dell'attendibilità del certificato dell'utente.
  • ssl_certificate/ssl_certificate_key - indica il percorso del certificato del server/chiave privata.

Non dimenticare di eseguire nginx -t per verificare che non ci siano errori di battitura nella configurazione e che tutti i file siano nel posto giusto e così via.

E questo è tutto! Come puoi vedere, la configurazione è molto semplice.

Verifica che funzioni in Firefox

Dato che facciamo tutto completamente in Linux, assumeremo che anche i nostri utenti lavorino in Linux (se hanno Windows, allora vedere le istruzioni per la configurazione dei browser nell'articolo precedente.

  1. Lanciamo Firefox.
  2. Proviamo prima ad accedere senza token. Otteniamo questa immagine:

    Autenticazione a due fattori sul sito tramite token USB. Ora anche per Linux

  3. Vai a su: preferenze # privacy, e andiamo a Dispositivi di sicurezza…
  4. ? Caricareper aggiungere un nuovo driver di dispositivo PKCS#11 e specificare il percorso del nostro librtpkcs11ecp.so.
  5. Per verificare che il certificato sia visibile, puoi andare su Gestione certificati. Ti verrà richiesto di inserire il PIN. Dopo l'inserimento corretto, puoi controllare cosa c'è nella scheda I tuoi certificati è apparso il nostro certificato dal token.
  6. Ora andiamo con il token. Firefox richiede di selezionare un certificato che verrà selezionato per il server. Scegli il nostro certificato.

    Autenticazione a due fattori sul sito tramite token USB. Ora anche per Linux

  7. UTILE!

    Autenticazione a due fattori sul sito tramite token USB. Ora anche per Linux

La configurazione viene eseguita una volta e, come puoi vedere nella finestra di richiesta del certificato, possiamo salvare la nostra selezione. Dopodiché, ogni volta che effettueremo l'accesso al portale, dovremo solo inserire un token e inserire il codice PIN utente specificato durante la formattazione. Dopo tale autenticazione, il server sa già quale utente ha effettuato l'accesso e non è più possibile creare ulteriori finestre di verifica, ma consentire immediatamente all'utente di accedere al proprio account personale.

Apache

Proprio come con nginx, nessuno dovrebbe avere problemi con l'installazione di Apache. Se non sai come installare questo server web, utilizza semplicemente la documentazione ufficiale.

E iniziamo a configurare il nostro HTTPS e l'autenticazione a due fattori:

  1. Per prima cosa devi attivare mod_ssl:
    $ a2enmod ssl
  2. Quindi abilita le impostazioni HTTPS predefinite del sito:
    $ a2ensite default-ssl
  3. Ora modifichiamo il file di configurazione: /etc/apache2/sites-enabled/default-ssl.conf:
        SSLEngine on
        SSLProtocol all -SSLv2
    
        SSLCertificateFile	/etc/apache2/sites-enabled/Server.crt
        SSLCertificateKeyFile /etc/apache2/sites-enabled/ServerKey.pem
    
        SSLCACertificateFile /etc/apache2/sites-enabled/CA.crt
    
        SSLVerifyClient require
        SSLVerifyDepth  10

    Come puoi vedere, i nomi dei parametri praticamente coincidono con i nomi dei parametri in nginx, quindi non li spiegherò. Ancora una volta, chiunque sia interessato ai dettagli è benvenuto nella documentazione.
    Ora riavviamo il nostro server:

    $ service apache2 reload
    $ service apache2 restart

  4. Come puoi vedere, la configurazione dell'autenticazione a due fattori su qualsiasi server Web, sia Windows che Linux, richiede al massimo un'ora. E la configurazione dei browser richiede circa 5 minuti. Molte persone pensano che configurare e utilizzare l’autenticazione a due fattori sia difficile e poco chiaro. Spero che il nostro articolo sfati questo mito, almeno un po’.

Solo gli utenti registrati possono partecipare al sondaggio. AccediPer favore.

Hai bisogno di istruzioni per configurare TLS con certificati secondo GOST 34.10-2012:

  • Sì, TLS-GOST è molto necessario

  • No, la sintonizzazione con gli algoritmi GOST non è interessante

44 utenti hanno votato. 9 utenti si sono astenuti.

Fonte: habr.com

Aggiungi un commento