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

Autenticazione a due fattori sul sito utilizzando un token USB. Ora anche per Linux.
In in uno dei nostri articoli precedenti abbiamo parlato dell'importanza della doppia autenticazione nei portali aziendali. Nell'ultima volta abbiamo dimostrato come impostare una autenticazione sicura su un server web IIS.

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

Ci avete chiesto — noi abbiamo scritto.

Cosa serve per iniziare?

  • Qualsiasi distribuzione moderna di Linux. Ho eseguito un'installazione di prova in MX Linux 18.2_x64. Questo ovviamente non è una distribuzione server, ma per Debian non ci saranno grandi differenze. Per altre distribuzioni i percorsi delle librerie e dei file di configurazione potrebbero variare leggermente.
  • Token. Continuiamo a utilizzare il modello Routoken ECDSA PKI, che è perfetto per le caratteristiche di velocità in uso aziendale.
  • Per lavorare con il token su Linux è necessario installare i seguenti pacchetti:
    libccid libpcsclite1 pcscd pcsc-tools opensc

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

Emissione di certificati

Negli articoli precedenti ci siamo basati sul fatto che i certificati per il server e i client verranno emessi utilizzando Microsoft CA. Tuttavia, poiché stiamo configurando tutto su Linux, parleremo anche di un modo alternativo per emettere questi certificati senza lasciare Linux.
Utilizzeremo XCA come CA (https://hohnstaedt.de/xca/), che è disponibile in qualsiasi moderna distribuzione Linux. Tutte le azioni che compiremo in XCA possono essere eseguite anche in modalità da riga di comando utilizzando gli strumenti OpenSSL e pkcs11-tool, ma per maggiore semplicità e chiarezza non le presenteremo in questo articolo.

Inizio

  1. Installiamo:
    $ apt-get install xca
  2. E lanciamo:
    $ xca
  3. Creiamo il nostro database per il CA — /root/CA.xdb
    Raccomandiamo di conservare il database del Certificate Authority in una cartella accessibile solo all'amministratore. Questo è importante per proteggere le chiavi private dei certificati root, che sono utilizzate per firmare tutti gli altri certificati.

Creiamo le chiavi e il certificato root CA

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

  1. Creiamo una chiave RSA-2048 per il CA. Per fare ciò, nella scheda Chiavi private clicchiamo su Nuova chiave e selezioniamo il tipo corrispondente.
  2. Imponiamo un nome per la nuova coppia di chiavi. L'ho chiamata — Chiave CA.
  3. Redigiamo il certificato CA utilizzando la coppia di chiavi creata. Per fare ciò, passiamo alla scheda Certificati e clicchiamo su Nuovo certificato.
  4. Assicuriamoci di selezionare SHA-256, poiché l'uso di SHA-1 non può più essere considerato sicuro.
  5. Come modello, assicuriamoci di scegliere [default] CA. Non dimenticate di cliccare su Applica tutto, altrimenti il modello non verrà applicato.
  6. Nella scheda Oggetto selezioniamo la nostra coppia di chiavi. Qui potete anche compilare tutti i campi principali del certificato.

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

Creiamo le chiavi e il certificato del server https

  1. Allo stesso modo, creiamo una chiave RSA-2048 per il server, l'ho chiamata — Chiave del server.
  2. Quando creiamo il certificato, selezioniamo che il certificato del server deve essere firmato dal certificato CA.
  3. Non dimentichiamo di selezionare SHA-256.
  4. Come modello, scegliamo [default] HTTPS_server. Clicchiamo su Applica tutto.
  5. Dopo di che, nella scheda Oggetto selezioniamo la nostra chiave e compiliamo i campi necessari.

Autenticazione a due fattori sul sito utilizzando 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 usarla è necessario installare la libreria PKCS#11 dal nostro sito. Per le distribuzioni popolari, distribuiamo pacchetti pronti che sono disponibili qui — https://www.rutoken.ru/support/download/pkcs/. Abbiamo anche versioni per arm64, armv7el, armv7hf, e2k, mipso32el, che possono essere scaricate dal nostro SDK — https://www.rutoken.ru/developers/sdk/. Oltre alle versioni per Linux, ci sono anche versioni per macOS, FreeBSD e Android.
  2. Aggiungiamo un nuovo Provider PKCS#11 in XCA. Per fare questo, andiamo nel menu Opzioni alla scheda Provider PKCS#11.
  3. Clicchiamo Add e selezioniamo il percorso della libreria PKCS#11. Nel mio caso si tratta di usrliblibrtpkcs11ecp.so.
  4. Avremo bisogno di un token formattato Rutoken ECP 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 scegliamo — chiave RSA-2048 su Rutoken ECP PKI. Ho chiamato questa chiave Client Key.

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

  7. Inseriamo il PIN e attendiamo il completamento della generazione hardware della coppia di chiavi.

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

  8. Creiamo il certificato per l'utente analogamente al certificato del server. Questa volta scegliamo il modello [default] HTTPS_client e non dimentichiamo di cliccare Applica tutto.
  9. Nella scheda Oggetto inseriamo le informazioni dell'utente. Rispondiamo affermativamente alla richiesta di salvataggio del certificato sul token.

Alla fine, nella scheda I certificati In XCA dovrebbe risultare circa così.

Autenticazione a due fattori sul sito utilizzando un token USB. Ora anche per Linux.
Questo minimo set di chiavi e certificati è sufficiente per iniziare la configurazione dei server.

Per la configurazione, dobbiamo eseguire l'esportazione del certificato CA, del certificato del server e della chiave privata del server.

Per fare questo, selezionare la voce desiderata nella scheda corrispondente in XCA e fare clic su Esportazione.

Nginx

Non parlerò su come installare e avviare il server nginx — ci sono abbastanza articoli su questo argomento su Internet, per non parlare della documentazione ufficiale. Procediamo direttamente alla configurazione di HTTPS e della autenticazione a due fattori tramite token.

Aggiungere le seguenti righe nella sezione server di 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 ssl in nginx può essere trovata qui — https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Describerò brevemente solo quelli che ho impostato:

  • ssl_verify_client — indica che è necessario verificare la catena di fiducia del certificato.
  • ssl_verify_depth — definisce la profondità di ricerca del certificato radice di fiducia nella catena. Poiché abbiamo un certificato client firmato direttamente dal certificato radice, la profondità è impostata su 1. Se il certificato dell'utente è firmato da una CA intermedia, è necessario impostare questo parametro su 2, e così via.
  • ssl_client_certificate — specifica il percorso del certificato radice fidato utilizzato per verificare la fiducia nel certificato dell'utente.
  • ssl_certificate/ssl_certificate_key — specificano il percorso del certificato / chiave privata del server.

Ricordiamo di eseguire nginx -t per verificare che nel file di configurazione non ci siano errori di battitura e che tutti i file siano nella posizione corretta, e così via.

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

Controlliamo il funzionamento in Firefox

Poiché stiamo eseguendo tutto completamente su Linux, consideriamo che anche i nostri utenti stiano usando Linux (se hanno Windows, allora vedere le istruzioni per la configurazione dei browser nell'articolo precedente.

  1. Avviamo Firefox.
  2. Proviamo inizialmente a entrare senza token. Otteniamo questa immagine:

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

  3. Accediamo a about:preferences#privacy, e andiamo su Dispositivi di sicurezza…
  4. Clicchiamo Load, per aggiungere un nuovo driver di dispositivo PKCS#11 e specificare il percorso della nostra librtpkcs11ecp.so.
  5. Per verificare che il certificato sia riconosciuto, si può accedere a Certificate Manager. Verrà visualizzata una richiesta per l'inserimento del PIN. Dopo aver inserito correttamente, si può verificare che nella scheda Your Certificates sia comparso il nostro certificato dal token.
  6. Ora accediamo con il token. Firefox offre di selezionare il certificato che sarà utilizzato sul server. Selezioniamo il nostro certificato.

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

  7. PROFIT!

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

La configurazione viene eseguita una sola volta e, come si può vedere nella finestra di richiesta del certificato, possiamo salvare la nostra scelta. Dopo questo, ad ogni accesso al portale sarà sufficiente inserire il token e il PIN dell'utente, impostato durante la formattazione. Dopo tale autenticazione, il server sa già quale utente si è connesso e non è necessario fare ulteriori richieste per la verifica, permettendo immediatamente all'utente di accedere al proprio pannello.

Apache

Come per nginx, non dovrebbero esserci problemi nell'installazione di apache. Se non sai come installare questo web server, utilizza semplicemente la documentazione ufficiale.

Ora passiamo alla configurazione del nostro HTTPS e dell'autenticazione a due fattori:

  1. Per prima cosa, è necessario attivare mod_ssl:
    $ a2enmod ssl
  2. E poi attivare 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 potete vedere, i nomi dei parametri corrispondono quasi esattamente ai nomi dei parametri in nginx, quindi non spiegherò ulteriormente. Chiunque sia interessato a maggiori dettagli è il benvenuto nella documentazione.
    Ora riavviamo il nostro server:

    $ service apache2 reload
    $ service apache2 restart

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

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

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

  • Sì, TLS-GOST è molto necessario

  • No, la configurazione con gli algoritmi GOST non interessa

Hanno votato 44 utenti. 9 utenti si sono astenuti.

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