Zwei-Faktor-Authentifizierung auf der Website mit USB-Token. Jetzt auch für Linux.

Zwei-Faktor-Authentifizierung auf der Website mit USB-Token. Jetzt auch für Linux.
In einem unserer vorherigen Artikel beschrieben wir die Bedeutung der Zwei-Faktor-Authentifizierung auf Unternehmensportalen. Beim letzten Mal haben wir gezeigt, wie man eine sichere Authentifizierung im Webserver IIS einrichtet.

In den Kommentaren wurden wir gebeten, eine Anleitung für die gängigsten Webserver unter Linux — nginx und Apache — zu schreiben.

Sie haben gefragt — wir haben geschrieben.

Was wird benötigt, um zu starten?

  • Jede moderne Linux-Distribution. Ich habe die Testkonfiguration in MX Linux 18.2_x64 durchgeführt. Dies ist zwar keine Server-Distribution, aber für Debian wird es wahrscheinlich keine wesentlichen Unterschiede geben. Bei anderen Distributionen können sich die Pfade zu den Bibliotheken und Konfigurationsdateien leicht unterscheiden.
  • Token. Wir verwenden weiterhin das Modell RUTOKEN elektronische Signatur PKI, das sich aufgrund seiner Geschwindigkeitseigenschaften ideal für den Unternehmenseinsatz eignet.
  • Für die Arbeit mit dem Token unter Linux müssen die folgenden Pakete installiert werden:
    libccid libpcsclite1 pcscd pcsc-tools opensc

Zwei-Faktor-Authentifizierung auf der Website mit USB-Token. Jetzt auch für Linux.

Zertifikate ausstellen

In den vorherigen Artikeln haben wir darauf hingewiesen, dass Zertifikate für Server und Clients mithilfe der Microsoft CA ausgestellt werden. Da wir jedoch alles in Linux einrichten, möchten wir auch eine alternative Methode zur Ausstellung dieser Zertifikate besprechen — ohne Linux zu verlassen.
Als CA verwenden wir XCA (https://hohnstaedt.de/xca/), das in jeder modernen Linux-Distribution verfügbar ist. Alle Aktionen, die wir in XCA durchführen, können auch über die Befehlszeile mit den Tools OpenSSL und pkcs11-tool erledigt werden. Um jedoch die Einfachheit und Übersichtlichkeit in diesem Artikel zu wahren, werden wir diese hier nicht aufführen.

Erste Schritte

  1. Installation:
    $ apt-get install xca
  2. Und starten Sie:
    $ xca
  3. Wir erstellen unsere Datenbank für die CA — /root/CA.xdb
    Wir empfehlen, die Datenbank der Zertifizierungsstelle in einem Ordner zu speichern, auf den nur der Administrator Zugriff hat. Dies ist wichtig, um die privaten Schlüssel der Root-Zertifikate zu schützen, die zur Signierung aller anderen Zertifikate verwendet werden.

Wir erstellen Schlüssel und Zertifikat der Root CA

Im Zentrum der Public Key Infrastructure (PKI) steht ein hierarchisches System. Das Hauptaugenmerk liegt auf der Root-Zertifizierungsstelle oder Root CA. Ihr Zertifikat muss daher als erstes erstellt werden.

  1. Wir generieren den privaten Schlüssel RSA-2048 für die CA. Dazu verwenden wir das Tab Private Keys klicken wir Neuer Schlüssel und wählen den entsprechenden Typ aus.
  2. Wir vergeben einen Namen für das neue Schlüsselpaar. Ich habe es CA Key genannt.
  3. Wir stellen das eigentliche CA-Zertifikat aus, indem wir das erstellte Schlüsselpaar verwenden. Dazu wechseln wir zum Tab Zertifikate und klicken auf Neues Zertifikat.
  4. Wir wählen unbedingt SHA-256, da die Verwendung von SHA-1 nicht mehr als sicher gilt.
  5. Als Vorlage wählen wir unbedingt [default] CA. Vergessen Sie nicht, auf Alle anwendenzu klicken, sonst wird das Template nicht angewendet.
  6. Auf der Registerkarte Betreff Wir wählen unser Schlüsselpaar aus. Dort können Sie auch alle wesentlichen Felder des Zertifikats ausfüllen.

Zwei-Faktor-Authentifizierung auf der Website mit USB-Token. Jetzt auch für Linux.

Wir erstellen Schlüssel und Zertifikat für den HTTPS-Server

  1. Ähnlich erstellen wir einen privaten Schlüssel für den Server RSA-2048, ich habe ihn Server Key genannt.
  2. Beim Erstellen des Zertifikats wählen wir, dass das Serverzertifikat mit dem CA-Zertifikat signiert werden muss.
  3. Vergessen Sie nicht, auszuwählen SHA-256.
  4. Als Vorlage wählen wir [default] HTTPS_server. Klicken Sie auf Alle anwenden.
  5. Anschließend wählen wir im Tab Betreff unseren Schlüssel aus und füllen die benötigten Felder aus.

Zwei-Faktor-Authentifizierung auf der Website mit USB-Token. Jetzt auch für Linux.

Wir erstellen Schlüssel und Zertifikat für den Benutzer

  1. Der Benutzerprivatschlüssel wird auf unserem Token gespeichert. Um damit zu arbeiten, müssen Sie die PKCS#11-Bibliothek von unserer Website installieren. Für gängige Distributionen bieten wir fertige Pakete an, die hier verfügbar sind — https://www.rutoken.ru/support/download/pkcs/. Wir haben auch Builds für arm64, armv7el, armv7hf, e2k, mipso32el, die Sie in unserem SDK finden können — https://www.rutoken.ru/developers/sdk/. Neben den Builds für Linux gibt es auch Builds für macOS, FreeBSD und Android.
  2. Fügen Sie einen neuen PKCS#11-Anbieter in XCA hinzu. Dazu gehen wir ins Menü Optionen zum Tab PKCS#11 Provider.
  3. Klicken Sie auf Add und wählen Sie den Pfad zur PKCS#11-Bibliothek aus. In meinem Fall ist das usrliblibrtpkcs11ecp.so.
  4. Wir benötigen ein formatierte Token von Rutoken ECP PKI. Laden Sie das Tool rtAdmin herunter — https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Führen wir aus
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u
  6. Als Schlüsseltype wählen wir — einen RSA-2048-Schlüssel auf dem Rutoken ECP PKI. Ich habe diesen Schlüssel Client Key genannt.

    Zwei-Faktor-Authentifizierung auf der Website mit USB-Token. Jetzt auch für Linux.

  7. Geben Sie den PIN-Code ein. Und warten Sie auf den Abschluss der hardwaregestützten Schlüsselpaargenerierung.

    Zwei-Faktor-Authentifizierung auf der Website mit USB-Token. Jetzt auch für Linux.

  8. Das Benutzerzertifikat erstellen wir analog zum Serverzertifikat. Diesmal wählen wir die Vorlage [default] HTTPS_client und vergessen Sie nicht zu klicken Alle anwenden.
  9. Auf der Registerkarte Betreff geben Sie die Benutzerinformationen ein. Auf die Anfrage, das Zertifikat auf dem Token zu speichern, antworten wir mit Ja.

Insgesamt sollte im Tab Zertifikate in XCA ungefähr dieses Bild erscheinen.

Zwei-Faktor-Authentifizierung auf der Website mit USB-Token. Jetzt auch für Linux.
Dieses minimale Set an Schlüsseln und Zertifikaten reicht aus, um mit der Konfiguration der Server zu beginnen.

Für die Konfiguration müssen wir das Zertifikat der Zertifizierungsstelle, das Serverzertifikat und den privaten Schlüssel des Servers exportieren.

Dazu wählen Sie den entsprechenden Eintrag auf dem entsprechenden Tab in XCA aus und klicken auf Export.

Nginx

Ich werde nicht beschreiben, wie man einen nginx-Server installiert und startet — dazu gibt es genug Artikel im Internet, ganz zu schweigen von der offiziellen Dokumentation. Lassen Sie uns direkt mit der Einrichtung von HTTPS und der Zwei-Faktor-Authentifizierung per Token beginnen.

Fügen Sie im Abschnitt server in der nginx.conf die folgenden Zeilen hinzu:

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;
}

Eine detaillierte Beschreibung aller Parameter, die die SSL-Konfiguration in nginx betreffen, finden Sie hier — https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Ich werde nur kurz die beschreiben, die ich selbst festgelegt habe:

  • ssl_verify_client — gibt an, dass die Vertrauenskette zum Zertifikat überprüft werden muss.
  • ssl_verify_depth — definiert die Tiefe der Suche nach einem vertrauenswürdigen Wurzelzertifikat in der Kette. Da unser Clientzertifikat direkt vom Wurzelzertifikat signiert ist, ist die Tiefe auf 1 festgelegt. Wenn das Benutzerzertifikat von einer Zwischen-CA signiert wird, muss in diesem Parameter 2 angegeben werden, und so weiter.
  • ssl_client_certificate — gibt den Pfad zum vertrauenswürdigen Wurzelzertifikat an, das bei der Überprüfung des Vertrauens in das Benutzerzertifikat verwendet wird.
  • ssl_certificate/ssl_certificate_key — geben den Pfad zum Zertifikat/zum privaten Schlüssel des Servers an.

Vergessen Sie nicht, nginx -t auszuführen, um zu überprüfen, dass im Konfigurationsfile keine Tippfehler sind und alle Dateien am richtigen Ort liegen usw.

Und das war's! Wie Sie sehen können, ist die Einrichtung sehr einfach.

Überprüfen der Funktion in Firefox

Da wir alles vollständig in Linux machen, gehen wir davon aus, dass auch unsere Benutzer in Linux arbeiten (wenn sie Windows haben, sehen Sie sich die Anleitung zur Konfiguration der Browser im vorherigen Artikel an.

  1. Starten wir Firefox.
  2. Lassen Sie uns zunächst versuchen, ohne Token zuzugreifen. Wir erhalten folgendes Bild:

    Zwei-Faktor-Authentifizierung auf der Website mit USB-Token. Jetzt auch für Linux.

  3. Besuchen Sie about:preferences#privacy, und gehen Sie zu Sicherheitsgeräte…
  4. Klicken Sie auf Load, um einen neuen PKCS#11-Gerätetreiber hinzuzufügen und den Pfad zu unserer librtpkcs11ecp.so anzugeben.
  5. Um zu überprüfen, ob das Zertifikat erkannt wird, können Sie in den Zertifikat-Managergehen. Es wird eine Aufforderung zur Eingabe des PIN-Codes angezeigt. Nach der korrekten Eingabe können Sie überprüfen, dass auf dem Tab Ihre Zertifikate unser Zertifikat vom Token angezeigt wird.
  6. Jetzt melden wir uns mit dem Token an. Firefox bietet an, das Zertifikat auszuwählen, das auf dem Server verwendet wird. Wählen Sie unser Zertifikat aus.

    Zwei-Faktor-Authentifizierung auf der Website mit USB-Token. Jetzt auch für Linux.

  7. PROFIT!

    Zwei-Faktor-Authentifizierung auf der Website mit USB-Token. Jetzt auch für Linux.

Die Konfiguration wird einmal durchgeführt, und wie im Anfragefenster für das Zertifikat zu sehen ist, können wir unsere Auswahl speichern. Danach müssen wir bei jedem Zugang zum Portal nur noch den Token einfügen und den PIN-Code des Benutzers eingeben, der beim Formatieren festgelegt wurde. Nach dieser Authentifizierung weiß der Server bereits, welcher Benutzer sich angemeldet hat, und es sind keine zusätzlichen Fenster zur Überprüfung mehr erforderlich; der Benutzer wird direkt in sein persönliches Dashboard gelassen.

Apache

Wie bei nginx sollten auch keine Probleme mit der Installation von apache auftreten. Wenn Sie nicht wissen, wie Sie diesen Webserver installieren, nutzen Sie einfach die offizielle Dokumentation.

Jetzt beginnen wir mit der Konfiguration unseres HTTPS und der Zwei-Faktor-Authentifizierung:

  1. Zuerst müssen Sie mod_ssl aktivieren:
    $ a2enmod ssl
  2. Und dann die HTTPS-Einstellungen der Website standardmäßig aktivieren:
    $ a2ensite default-ssl
  3. Jetzt bearbeiten wir die Konfigurationsdatei: /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

    Wie Sie sehen, stimmen die Namen der Parameter nahezu mit den Bezeichnungen in nginx überein, daher werde ich sie nicht weiter erklären. Wiederum, für diejenigen, die an Einzelheiten interessiert sind – willkommen in der Dokumentation.
    Jetzt starten wir unseren Server neu:

    $ service apache2 reload
    $ service apache2 restart

  4. Wie Sie sehen, ist die Einrichtung der Zwei-Faktor-Authentifizierung auf jedem Webserver, sei es unter Windows oder Linux, eine Angelegenheit von maximal einer Stunde. Das Einrichten der Browser dauert etwa 5 Minuten. Viele glauben, dass die Einrichtung und Handhabung der Zwei-Faktor-Authentifizierung kompliziert und unverständlich ist. Ich hoffe, unser Artikel widerlegt diesen Mythos zumindest ein wenig.

Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte melden Sie sich an.Sind Sie an Contour interessiert?

Benötigen Sie eine Anleitung zur Konfiguration von TLS mit Zertifikaten nach GOST 34.10-2012:

  • Ja, TLS-GOST wird dringend benötigt

  • Nein, die Konfiguration mit GOST-Algorithmen interessiert nicht

44 Benutzer haben abgestimmt. 9 Benutzer haben sich enthalten.

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster