Autenticazione a due fattori sul sito con utilizzo di un token USB. Ora anche per Linux

Autenticazione a due fattori sul sito con utilizzo di un token USB. Ora anche per Linux
In in uno dei nostri articoli precedenti abbiamo parlato dell'importanza dell'autenticazione a due fattori nei portali aziendali. L'ultima volta abbiamo dimostrato come configurare un'autenticazione sicura nel server web IIS.

Nei commenti ci è stato chiesto di scrivere una guida per i più comuni server web su Linux — nginx e Apache.

Ci avete chiesto — noi abbiamo scritto.

Cosa serve per iniziare?

  • Qualsiasi distribuzione Linux moderna. Ho eseguito la configurazione di prova in MX Linux 18.2_x64. Questo ovviamente non è una distribuzione server, ma non ci dovrebbero essere differenze significative per Debian. Per altre distribuzioni, i percorsi delle librerie di configurazione potrebbero variare leggermente.
  • Token. Continuiamo a utilizzare il modello RUTOKEN ECP PKI, che si adatta perfettamente per le caratteristiche di velocità nell'uso aziendale.
  • Per lavorare con il token in Linux è necessario installare i seguenti pacchetti:
    libccid libpcsclite1 pcscd pcsc-tools opensc

Autenticazione a due fattori sul sito con utilizzo di un token USB. Ora anche per Linux

Emissione di certificati

Negli articoli precedenti ci siamo basati sul fatto che i certificati del server e dei client sarebbero stati emessi tramite Microsoft CA. Ma poiché stiamo configurando tutto in Linux, ne approfitteremo per descrivere un altro modo per emettere questi certificati — senza uscire da Linux.
Come CA utilizzeremo XCA (https://hohnstaedt.de/xca/), disponibile in qualsiasi distribuzione Linux moderna. Tutte le operazioni che effettueremo in XCA possono essere eseguite anche in modalità linea di comando utilizzando gli strumenti OpenSSL e pkcs11-tool, ma per maggiore semplicità e chiarezza, in questo articolo non le includeremo.

Inizio del lavoro

  1. Installiamo:
    $ apt-get install xca
  2. E lo avviamo:
    $ xca
  3. Creiamo il nostro database per il CA — /root/CA.xdb
    Raccomandiamo di conservare il database dell'Autorità di Certificazione in una cartella accessibile solo dall'amministratore. È importante per la protezione delle chiavi private dei certificati radice utilizzati per firmare tutti gli altri certificati.

Creiamo le chiavi e il certificato root CA

Alla base dell'infrastruttura PKI c'è un sistema gerarchico. Il principale in questo sistema è il centro di certificazione radice o root CA. Il suo certificato deve essere creato per primo.

  1. Creiamo una chiave privata RSA-2048 per il CA. Per fare ciò, nella scheda Chiavi Private clicchiamo su Nuova Chiave e selezioniamo il tipo corrispondente.
  2. Impostiamo un nome per la nuova coppia di chiavi. L'ho chiamata — Chiave CA.
  3. Stiamo emettendo il certificato CA stesso, utilizzando la coppia di chiavi creata. A tal fine, andiamo alla scheda Certificati e facciamo clic su Nuovo Certificato.
  4. Assicurati di selezionare SHA-256, poiché l'uso di SHA-1 non può più essere considerato sicuro.
  5. Come modello, assicurati di selezionare [default] CA. Non dimenticare di fare clic su Applica tutto, altrimenti il modello non verrà applicato.
  6. Nella scheda Soggetto selezioniamo la nostra coppia di chiavi. Qui puoi anche compilare tutti i campi principali del certificato.

Autenticazione a due fattori sul sito con utilizzo di un token USB. Ora anche per Linux

Creiamo le chiavi e il certificato del server https

  1. Allo stesso modo, creiamo una chiave privata RSA-2048 per il server, l'ho chiamata — Server Key.
  2. Quando crei il certificato, seleziona che il certificato del server deve essere firmato dal certificato CA.
  3. Non dimenticare di selezionare SHA-256.
  4. Come modello, scegli [default] HTTPS_server. Facciamo clic su Applica tutto.
  5. Dopo di che, nella scheda Soggetto selezioniamo la nostra chiave e compiliamo i campi necessari.

Autenticazione a due fattori sul sito con utilizzo di un token USB. Ora anche per Linux

Creiamo le chiavi e il certificato per l'utente

  1. La chiave privata dell'utente sarà memorizzata sul nostro token. Per lavorarci, è necessario installare la biblioteca PKCS#11 dal nostro sito. Per le distribuzioni popolari, distribuiamo pacchetti pronti, che si trovano qui — https://www.rutoken.ru/support/download/pkcs/. Abbiamo anche build per arm64, armv7el, armv7hf, e2k, mipso32el, che puoi ottenere nel nostro SDK — https://www.rutoken.ru/developers/sdk/. Oltre alle build per linux, ci sono anche build per macOS, freebsd e android.
  2. Aggiungiamo un nuovo Provider PKCS#11 in XCA. Per fare ciò, andiamo al menu Opzioni nella scheda Provider PKCS#11.
  3. Facciamo clic su Aggiungi e selezioniamo il percorso della libreria PKCS#11. Nel mio caso è usrliblibrtpkcs11ecp.so.
  4. Avremo bisogno di un token formattato Rootoken EЦП PKI. Scarichiamo l'utilità rtAdmin — https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Eseguiamo
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u
  6. Come tipo di chiave, selezioniamo — chiave RSA-2048 su Rootoken EЦП PKI. Ho chiamato questa chiave Client Key.

    Autenticazione a due fattori sul sito con utilizzo di un token USB. Ora anche per Linux

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

    Autenticazione a due fattori sul sito con utilizzo di un token USB. Ora anche per Linux

  8. Creiamo il certificato per l'utente analogamente al certificato del server. Questa volta selezioniamo il modello [default] HTTPS_client e non dimentichiamo di fare clic su Applica tutto.
  9. Nella scheda Soggetto inseriamo le informazioni sull'utente. Quando ci viene chiesto di salvare il certificato sul token, rispondiamo affermativamente.

Di conseguenza, nella scheda Certificati in XCA dovrebbe apparire un'immagine simile.

Autenticazione a due fattori sul sito con utilizzo di un token USB. Ora anche per Linux
Questo minimo insieme di chiavi e certificati è sufficiente per iniziare a configurare direttamente i server.

Per la configurazione, è necessario esportare il certificato dell'Autorità di Certificazione, il certificato del server e la chiave privata del server.

Per questo è necessario selezionare la registrazione desiderata nella scheda corrispondente in XCA e fare clic su Export.

Nginx

Non parlerò di come installare e avviare un server nginx: ci sono articoli sufficienti su questo argomento su Internet, per non parlare della documentazione ufficiale. Procediamo direttamente con la configurazione di HTTPS e dell'autenticazione a due fattori tramite token.

Aggiungere nella sezione server in nginx.conf le seguenti righe:

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 ssl in nginx è disponibile qui — https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Descriverò brevemente solo quelli che ho impostato:

  • ssl_verify_client — indica che è necessario verificare la catena di fiducia per il certificato.
  • ssl_verify_depth — determina la profondità di ricerca del certificato radice fiduciario nella catena. Poiché il nostro certificato client è firmato direttamente dal certificato radice, quindi la profondità è impostata su 1. Se il certificato dell’utente è firmato da un CA intermedio, in questo parametro è necessario indicare 2, e così via.
  • ssl_client_certificate — indica il percorso del certificato radice fiduciario utilizzato per verificare la fiducia nel certificato dell’utente.
  • ssl_certificate/ssl_certificate_key — indicano il percorso del certificato/chiduzione privata del server.

Non dimenticate di eseguire nginx -t per verificare che non ci siano errori nel file di configurazione, che tutti i file siano al loro posto e così via.

E quindi è tutto! Come potete vedere, la configurazione è molto semplice.

Verifichiamo il funzionamento in Firefox

Dal momento che stiamo facendo tutto completamente in Linux, consideriamo che anche i nostri utenti utilizzino Linux (se hanno Windows, allora vedere le istruzioni per la configurazione dei browser nel precedente articolo.

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

    Autenticazione a due fattori sul sito con utilizzo di un token USB. Ora anche per Linux

  3. Accediamo a about:preferences#privacy, e andiamo su Dispositivi di sicurezza…
  4. Facciamo clic su Carico, per aggiungere un nuovo driver per dispositivo PKCS#11 e specificare il percorso del nostro librtpkcs11ecp.so.
  5. Per verificare se il certificato è visibile, possiamo andare su Gestore certificati. Apparirà una richiesta per inserire il PIN. Dopo aver inserito correttamente, possiamo verificare che nella scheda I tuoi certificati sia comparso il nostro certificato dal token.
  6. Ora accediamo con il token. Firefox propone di scegliere il certificato che sarà selezionato sul server. Selezioniamo il nostro certificato.

    Autenticazione a due fattori sul sito con utilizzo di un token USB. Ora anche per Linux

  7. PROFIT!

    Autenticazione a due fattori sul sito con utilizzo di un token USB. Ora anche per Linux

La configurazione viene eseguita una sola volta e, come si può vedere nella finestra della richiesta di certificato, possiamo salvare la nostra scelta. Dopo di che, ad ogni accesso al portale, dovremo solo inserire il token e digitare il PIN dell'utente, che è stato impostato durante la formattazione. Dopo tale autenticazione, il server sa già quale utente si è connesso e non è necessario aprire ulteriori finestre per la verifica, permettendo subito all'utente di accedere al proprio pannello personale.

Apache

Così come per nginx, chiunque non avrà problemi a installare apache. Se non sai come installare questo web server, puoi semplicemente fare riferimento alla documentazione ufficiale.

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

  1. Per prima cosa, è necessario attivare mod_ssl:
    $ a2enmod ssl
  2. E poi abilitare le impostazioni HTTPS del sito di default:
    $ 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 corrispondono quasi a quelli dei parametri in nginx, quindi non spiegherò oltre. Ancora, chi è interessato ai dettagli è benvenuto nella documentazione.
    Ora riavviamo il nostro server:

    $ service apache2 reload
    $ service apache2 restart

  4. Come puoi vedere, configurare l'autenticazione a due fattori su qualsiasi web server, sia in Windows che in Linux, richiede al massimo un'ora. La configurazione dei browser richiede circa 5 minuti. Molti ritengono che configurare e lavorare con l'autenticazione a due fattori sia complicato e poco chiaro. Spero che il nostro articolo sfati un po' questo mito.

Solo gli utenti registrati possono partecipare al sondaggio. Accedi, per favore.

È necessaria un'istruzione per configurare il funzionamento di TLS con certificati secondo GOST 34.10-2012:

  • Sì, TLS-GOST è molto necessario

  • No, la configurazione con algoritmi GOST non è interessante

Hanno votato 44 utenti. Si sono astenuti 9 utenti.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster