
In 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 , 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

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 (), 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
- Installiamo:
$ apt-get install xca - E lo avviamo:
$ xca - 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.
- 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.
- Impostiamo un nome per la nuova coppia di chiavi. L'ho chiamata — Chiave CA.
- 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.
- Assicurati di selezionare SHA-256, poiché l'uso di SHA-1 non può più essere considerato sicuro.
- Come modello, assicurati di selezionare [default] CA. Non dimenticare di fare clic su Applica tutto, altrimenti il modello non verrà applicato.
- Nella scheda Soggetto selezioniamo la nostra coppia di chiavi. Qui puoi anche compilare tutti i campi principali del certificato.

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

Creiamo le chiavi e il certificato per l'utente
- 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 — . Abbiamo anche build per arm64, armv7el, armv7hf, e2k, mipso32el, che puoi ottenere nel nostro SDK — . Oltre alle build per linux, ci sono anche build per macOS, freebsd e android.
- Aggiungiamo un nuovo Provider PKCS#11 in XCA. Per fare ciò, andiamo al menu Opzioni nella scheda Provider PKCS#11.
- Facciamo clic su Aggiungi e selezioniamo il percorso della libreria PKCS#11. Nel mio caso è usrliblibrtpkcs11ecp.so.
- Avremo bisogno di un token formattato Rootoken EЦП PKI. Scarichiamo l'utilità rtAdmin —
- Eseguiamo
$ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u - Come tipo di chiave, selezioniamo — chiave RSA-2048 su Rootoken EЦП PKI. Ho chiamato questa chiave Client Key.

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

- 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.
- 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.

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 —
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 .
- Avviamo Firefox.
- Proviamo prima ad accedere senza token. Otteniamo questa immagine:

- Accediamo a about:preferences#privacy, e andiamo su Dispositivi di sicurezza…
- Facciamo clic su Carico, per aggiungere un nuovo driver per dispositivo PKCS#11 e specificare il percorso del nostro librtpkcs11ecp.so.
- 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.
- Ora accediamo con il token. Firefox propone di scegliere il certificato che sarà selezionato sul server. Selezioniamo il nostro certificato.

- PROFIT!

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:
- Per prima cosa, è necessario attivare mod_ssl:
$ a2enmod ssl - E poi abilitare le impostazioni HTTPS del sito di default:
$ a2ensite default-ssl - 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 10Come 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
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. , 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





