Έλεγχος ταυτότητας δύο παραγόντων στον ιστότοπο με χρήση διακριτικού USB. Τώρα και για Linux

Έλεγχος ταυτότητας δύο παραγόντων στον ιστότοπο με χρήση διακριτικού USB. Τώρα και για Linux
В ένα από τα προηγούμενα άρθρα μας μιλήσαμε για τη σημασία του ελέγχου ταυτότητας δύο παραγόντων σε εταιρικές πύλες εταιρειών. Την τελευταία φορά δείξαμε πώς να ρυθμίσετε τον ασφαλή έλεγχο ταυτότητας στον διακομιστή ιστού IIS.

Στα σχόλια, μας ζητήθηκε να γράψουμε οδηγίες για τους πιο συνηθισμένους διακομιστές ιστού για Linux - nginx και Apache.

Ρώτησες - γράψαμε.

Τι χρειάζεστε για να ξεκινήσετε;

  • Οποιαδήποτε σύγχρονη διανομή Linux. Έκανα μια δοκιμαστική εγκατάσταση στο MX Linux 18.2_x64. Αυτή φυσικά δεν είναι διανομή διακομιστή, αλλά είναι απίθανο να υπάρχουν διαφορές για το Debian. Για άλλες διανομές, οι διαδρομές προς τις βιβλιοθήκες ρυθμίσεων ενδέχεται να διαφέρουν ελαφρώς.
  • Ενδειξη. Συνεχίζουμε να χρησιμοποιούμε το μοντέλο Rutoken EDS PKI, το οποίο είναι ιδανικό ως προς τα χαρακτηριστικά ταχύτητας για εταιρική χρήση.
  • Για να εργαστείτε με ένα διακριτικό στο Linux, πρέπει να εγκαταστήσετε τα ακόλουθα πακέτα:
    libccid libpcsclite1 pcscd pcsc-tools opensc

Έλεγχος ταυτότητας δύο παραγόντων στον ιστότοπο με χρήση διακριτικού USB. Τώρα και για Linux

Έκδοση πιστοποιητικών

Σε προηγούμενα άρθρα, βασιστήκαμε στο γεγονός ότι τα πιστοποιητικά διακομιστή και πελάτη θα εκδίδονται με χρήση της Microsoft CA. Αλλά επειδή ρυθμίζουμε τα πάντα στο Linux, θα σας ενημερώσουμε επίσης για έναν εναλλακτικό τρόπο έκδοσης αυτών των πιστοποιητικών - χωρίς να φύγετε από το Linux.
Θα χρησιμοποιήσουμε το XCA ως CA (https://hohnstaedt.de/xca/), το οποίο είναι διαθέσιμο σε οποιαδήποτε σύγχρονη διανομή Linux. Όλες οι ενέργειες που θα εκτελέσουμε στο XCA μπορούν να γίνουν σε λειτουργία γραμμής εντολών χρησιμοποιώντας τα βοηθητικά προγράμματα OpenSSL και pkcs11-εργαλείο, αλλά για μεγαλύτερη απλότητα και σαφήνεια, δεν θα τις παρουσιάσουμε σε αυτό το άρθρο.

Ξεκινώντας

  1. Εγκαθιστώ:
    $ apt-get install xca
  2. Και τρέχουμε:
    $ xca
  3. Δημιουργούμε τη βάση δεδομένων μας για CA - /root/CA.xdb
    Συνιστούμε την αποθήκευση της βάσης δεδομένων της Αρχής έκδοσης πιστοποιητικών σε έναν φάκελο όπου έχει πρόσβαση μόνο ο διαχειριστής. Αυτό είναι σημαντικό για την προστασία των ιδιωτικών κλειδιών των πιστοποιητικών ρίζας, τα οποία χρησιμοποιούνται για την υπογραφή όλων των άλλων πιστοποιητικών.

Δημιουργήστε κλειδιά και πιστοποιητικό CA root

Μια υποδομή δημόσιου κλειδιού (PKI) βασίζεται σε ένα ιεραρχικό σύστημα. Το κύριο πράγμα σε αυτό το σύστημα είναι η αρχή πιστοποίησης ρίζας ή η αρχή πιστοποίησης ρίζας. Πρέπει πρώτα να δημιουργηθεί το πιστοποιητικό του.

  1. Δημιουργούμε ένα ιδιωτικό κλειδί RSA-2048 για την ΑΠ. Για να το κάνετε αυτό, στην καρτέλα Ιδιωτικά κλειδιά Σπρώξτε Νέα Βασικά και επιλέξτε τον κατάλληλο τύπο.
  2. Ορίστε ένα όνομα για το νέο ζεύγος κλειδιών. Το ονόμασα CA Key.
  3. Εκδίδουμε το ίδιο το πιστοποιητικό ΑΠ, χρησιμοποιώντας το δημιουργημένο ζεύγος κλειδιών. Για να το κάνετε αυτό, μεταβείτε στην καρτέλα Πιστοποιητικά και κάντε κλικ Νέο Πιστοποιητικό.
  4. Φροντίστε να επιλέξετε SHA-256, επειδή η χρήση του SHA-1 δεν μπορεί πλέον να θεωρείται ασφαλής.
  5. Φροντίστε να επιλέξετε ως πρότυπο [προεπιλογή]CA. Μην ξεχάσετε να κάνετε κλικ στο Εφαρμόστε όλα, διαφορετικά το πρότυπο δεν εφαρμόζεται.
  6. Στην καρτέλα Θέμα επιλέξτε το ζεύγος κλειδιών μας. Εκεί μπορείτε να συμπληρώσετε όλα τα κύρια πεδία του πιστοποιητικού.

Έλεγχος ταυτότητας δύο παραγόντων στον ιστότοπο με χρήση διακριτικού USB. Τώρα και για Linux

Δημιουργία κλειδιών και πιστοποιητικού διακομιστή https

  1. Με παρόμοιο τρόπο, δημιουργούμε ένα ιδιωτικό κλειδί RSA-2048 για τον διακομιστή, το ονόμασα Κλειδί διακομιστή.
  2. Κατά τη δημιουργία ενός πιστοποιητικού, επιλέγουμε ότι το πιστοποιητικό διακομιστή πρέπει να είναι υπογεγραμμένο με πιστοποιητικό CA.
  3. Μην ξεχάσετε να επιλέξετε SHA-256.
  4. Επιλέγουμε ως πρότυπο [προεπιλογή] HTTPS_server. Κάντε κλικ στο Εφαρμόστε όλα.
  5. Στη συνέχεια, στην καρτέλα Θέμα επιλέξτε το κλειδί μας και συμπληρώστε τα απαιτούμενα πεδία.

Έλεγχος ταυτότητας δύο παραγόντων στον ιστότοπο με χρήση διακριτικού USB. Τώρα και για Linux

Δημιουργήστε κλειδιά και πιστοποιητικό για τον χρήστη

  1. Το ιδιωτικό κλειδί του χρήστη θα αποθηκευτεί στο διακριτικό μας. Για να εργαστείτε με αυτό, πρέπει να εγκαταστήσετε τη βιβλιοθήκη PKCS#11 από τον ιστότοπό μας. Για δημοφιλείς διανομές, διανέμουμε έτοιμα πακέτα, τα οποία βρίσκονται εδώ - https://www.rutoken.ru/support/download/pkcs/. Έχουμε επίσης συγκροτήματα για τα arm64, armv7el, armv7hf, e2k, mipso32el, τα οποία μπορούν να ληφθούν από το SDK μας - https://www.rutoken.ru/developers/sdk/. Εκτός από συγκροτήματα για Linux, υπάρχουν και συγκροτήματα για macOS, freebsd και android.
  2. Προσθήκη νέου παρόχου PKCS#11 στο XCA. Για να το κάνετε αυτό, μεταβείτε στο μενού Επιλογές στην καρτέλα Πάροχος PKCS#11.
  3. Κάντε κλικ Πρόσθεση και επιλέξτε τη διαδρομή προς τη βιβλιοθήκη PKCS#11. Στην περίπτωσή μου είναι usrliblibrtpkcs11ecp.so.
  4. Θα χρειαστούμε ένα διαμορφωμένο διακριτικό Rutoken EDS PKI. Κατεβάστε το βοηθητικό πρόγραμμα rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. πραγματοποιούμε
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. Επιλέγουμε το κλειδί RSA-2048 για το Rutoken EDS PKI ως τύπο κλειδιού. Κάλεσα αυτό το κλειδί Client Key.

    Έλεγχος ταυτότητας δύο παραγόντων στον ιστότοπο με χρήση διακριτικού USB. Τώρα και για Linux

  7. Εισαγάγετε τον κωδικό PIN. Και περιμένουμε την ολοκλήρωση της δημιουργίας υλικού του ζεύγους κλειδιών

    Έλεγχος ταυτότητας δύο παραγόντων στον ιστότοπο με χρήση διακριτικού USB. Τώρα και για Linux

  8. Δημιουργούμε ένα πιστοποιητικό για τον χρήστη κατ' αναλογία με το πιστοποιητικό διακομιστή. Αυτή τη φορά επιλέγουμε ένα πρότυπο [προεπιλογή] HTTPS_client και μην ξεχάσετε να κάνετε κλικ Εφαρμόστε όλα.
  9. Στην καρτέλα Θέμα εισάγετε πληροφορίες για τον χρήστη. Απαντάμε καταφατικά στο αίτημα αποθήκευσης του πιστοποιητικού για το διακριτικό.

Ως αποτέλεσμα, στην καρτέλα Πιστοποιητικά στο XCA θα πρέπει να πάρετε κάτι σαν αυτό.

Έλεγχος ταυτότητας δύο παραγόντων στον ιστότοπο με χρήση διακριτικού USB. Τώρα και για Linux
Αυτό το ελάχιστο σύνολο κλειδιών και πιστοποιητικών είναι αρκετό για να ξεκινήσει η ρύθμιση των ίδιων των διακομιστών.

Για τη διαμόρφωση, πρέπει να εξαγάγουμε το πιστοποιητικό CA, το πιστοποιητικό διακομιστή και το ιδιωτικό κλειδί διακομιστή.

Για να το κάνετε αυτό, επιλέξτε την επιθυμητή καταχώρηση στην αντίστοιχη καρτέλα στο XCA και κάντε κλικ εξαγωγή.

nginx

Δεν θα γράψω πώς να εγκαταστήσω και να εκτελέσω έναν διακομιστή nginx - υπάρχουν αρκετά άρθρα σχετικά με αυτό το θέμα στο Διαδίκτυο, για να μην αναφέρουμε την επίσημη τεκμηρίωση. Ας πάμε κατευθείαν στη ρύθμιση του HTTPS και του ελέγχου ταυτότητας δύο παραγόντων χρησιμοποιώντας ένα διακριτικό.

Προσθέστε τις ακόλουθες γραμμές στην ενότητα διακομιστή στο 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;
}

Μια λεπτομερής περιγραφή όλων των παραμέτρων που σχετίζονται με τη διαμόρφωση του ssl στο nginx μπορείτε να βρείτε εδώ - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Θα περιγράψω εν συντομία αυτά που ρώτησα τον εαυτό μου:

  • ssl_verify_client - καθορίζει ότι η αλυσίδα αξιοπιστίας για το πιστοποιητικό πρέπει να επαληθευτεί.
  • ssl_verify_depth - Καθορίζει το βάθος αναζήτησης για το αξιόπιστο πιστοποιητικό ρίζας στην αλυσίδα. Εφόσον το πιστοποιητικό πελάτη μας υπογράφεται αμέσως στο ριζικό πιστοποιητικό, το βάθος ορίζεται σε 1. Εάν το πιστοποιητικό χρήστη είναι υπογεγραμμένο σε μια ενδιάμεση αρχή έκδοσης πιστοποιητικών, τότε πρέπει να καθοριστεί το 2 σε αυτήν την παράμετρο κ.ο.κ.
  • ssl_client_certificate - καθορίζει τη διαδρομή προς το αξιόπιστο πιστοποιητικό ρίζας, το οποίο χρησιμοποιείται κατά τον έλεγχο εμπιστοσύνης στο πιστοποιητικό του χρήστη.
  • ssl_certificate/ssl_certificate_key - υποδείξτε τη διαδρομή προς το πιστοποιητικό διακομιστή/ιδιωτικό κλειδί.

Μην ξεχάσετε να εκτελέσετε το nginx -t για να ελέγξετε ότι δεν υπάρχουν τυπογραφικά λάθη στη διαμόρφωση και ότι όλα τα αρχεία βρίσκονται στη σωστή θέση κ.λπ.

Και αυτό είναι όλο! Όπως μπορείτε να δείτε, η ρύθμιση είναι πολύ απλή.

Έλεγχος ότι λειτουργεί στον Firefox

Εφόσον τα κάνουμε όλα εντελώς στο Linux, θα υποθέσουμε ότι οι χρήστες μας εργάζονται και σε Linux (αν έχουν Windows, τότε δείτε τις οδηγίες για τη ρύθμιση των προγραμμάτων περιήγησης στο προηγούμενο άρθρο.

  1. Ας ξεκινήσουμε τον Firefox.
  2. Ας προσπαθήσουμε πρώτα να συνδεθείτε χωρίς διακριτικό. Παίρνουμε αυτή την εικόνα:

    Έλεγχος ταυτότητας δύο παραγόντων στον ιστότοπο με χρήση διακριτικού USB. Τώρα και για Linux

  3. Ας πάμε στο σχετικά με: τις προτιμήσεις # ιδιωτικότητα, και πάμε στο Συσκευές Ασφαλείας…
  4. Κάντε κλικ Φορτίογια να προσθέσετε ένα νέο πρόγραμμα οδήγησης συσκευής PKCS#11 και να καθορίσετε τη διαδρομή προς το librtpkcs11ecp.so.
  5. Για να ελέγξετε ότι το πιστοποιητικό είναι ορατό, μπορείτε να μεταβείτε στο Διευθυντής πιστοποιητικό. Θα σας ζητηθεί να εισαγάγετε το PIN σας. Μετά τη σωστή εισαγωγή, μπορείτε να ελέγξετε τι υπάρχει στην καρτέλα Τα πιστοποιητικά σας εμφανίστηκε το πιστοποιητικό μας από το διακριτικό.
  6. Τώρα ας πάμε με το διακριτικό. Ο Firefox σας ζητά να επιλέξετε ένα πιστοποιητικό που θα επιλεγεί για τον διακομιστή. Επιλέξτε το πιστοποιητικό μας.

    Έλεγχος ταυτότητας δύο παραγόντων στον ιστότοπο με χρήση διακριτικού USB. Τώρα και για Linux

  7. ΚΕΡΔΟΣ!

    Έλεγχος ταυτότητας δύο παραγόντων στον ιστότοπο με χρήση διακριτικού USB. Τώρα και για Linux

Η ρύθμιση γίνεται μία φορά και όπως μπορείτε να δείτε στο παράθυρο αιτήματος πιστοποιητικού, μπορούμε να αποθηκεύσουμε την επιλογή μας. Μετά από αυτό, κάθε φορά που συνδέουμε στην πύλη, θα χρειάζεται μόνο να εισάγουμε ένα διακριτικό και να εισάγουμε τον κωδικό PIN χρήστη που καθορίστηκε κατά τη μορφοποίηση. Μετά από αυτόν τον έλεγχο ταυτότητας, ο διακομιστής γνωρίζει ήδη ποιος χρήστης έχει συνδεθεί και δεν μπορείτε πλέον να δημιουργήσετε πρόσθετα παράθυρα για επαλήθευση, αλλά αφήστε αμέσως τον χρήστη στον προσωπικό του λογαριασμό.

Apache

Ακριβώς όπως με το nginx, κανείς δεν θα πρέπει να έχει κανένα πρόβλημα με την εγκατάσταση του apache. Εάν δεν ξέρετε πώς να εγκαταστήσετε αυτόν τον διακομιστή web, απλώς χρησιμοποιήστε την επίσημη τεκμηρίωση.

Και αρχίζουμε να ρυθμίζουμε τον έλεγχο ταυτότητας HTTPS και δύο παραγόντων:

  1. Πρώτα πρέπει να ενεργοποιήσετε το mod_ssl:
    $ a2enmod ssl
  2. Και στη συνέχεια ενεργοποιήστε τις προεπιλεγμένες ρυθμίσεις HTTPS του ιστότοπου:
    $ a2ensite default-ssl
  3. Τώρα επεξεργαζόμαστε το αρχείο διαμόρφωσης: /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

    Όπως μπορείτε να δείτε, τα ονόματα των παραμέτρων πρακτικά συμπίπτουν με τα ονόματα των παραμέτρων στο nginx, οπότε δεν θα τα εξηγήσω. Και πάλι, όποιος ενδιαφέρεται για τις λεπτομέρειες είναι ευπρόσδεκτος στην τεκμηρίωση.
    Τώρα κάνουμε επανεκκίνηση του διακομιστή μας:

    $ service apache2 reload
    $ service apache2 restart

  4. Όπως μπορείτε να δείτε, η ρύθμιση του ελέγχου ταυτότητας δύο παραγόντων σε οποιονδήποτε διακομιστή ιστού, είτε σε Windows είτε σε Linux, διαρκεί μία ώρα το πολύ. Και η ρύθμιση των προγραμμάτων περιήγησης διαρκεί περίπου 5 λεπτά. Πολλοί άνθρωποι πιστεύουν ότι η ρύθμιση και η εργασία με έλεγχο ταυτότητας δύο παραγόντων είναι δύσκολη και ασαφής. Ελπίζω το άρθρο μας να καταρρίψει αυτόν τον μύθο, τουλάχιστον λίγο.

Μόνο εγγεγραμμένοι χρήστες μπορούν να συμμετάσχουν στην έρευνα. Συνδεθείτε, Σας παρακαλούμε.

Χρειάζεστε οδηγίες για τη ρύθμιση του TLS με πιστοποιητικά σύμφωνα με το GOST 34.10-2012:

  • Ναι, το TLS-GOST είναι πολύ απαραίτητο

  • Όχι, ο συντονισμός με τους αλγόριθμους GOST δεν είναι ενδιαφέρον

Ψήφισαν 44 χρήστες. 9 χρήστες απείχαν.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο