Zwei-Faktor-Authentifizierung auf der Website unter Verwendung eines USB-Tokens. Jetzt auch für Linux

Zwei-Faktor-Authentifizierung auf der Website unter Verwendung eines USB-Tokens. Jetzt auch für Linux
Im in einem unserer vorherigen Artikel haben wir über die Bedeutung der Zwei-Faktor-Authentifizierung auf den Unternehmensportalen gesprochen. Beim letzten Mal haben wir gezeigt, wie man die sichere Authentifizierung auf einem 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 es geschrieben.

Was wird benötigt, um zu beginnen?

  • Eine moderne Linux-Distribution. Ich habe die Testkonfiguration auf MX Linux 18.2_x64 durchgeführt. Dies ist natürlich keine Server-Distribution, aber für Debian wird es wahrscheinlich keine großen Unterschiede geben. Bei anderen Distributionen können die Pfade zu den Config-Dateien leicht variieren.
  • Token. Wir nutzen weiterhin das Modell RUTOKEN EDS PKI, das sich hinsichtlich der Geschwindigkeitsmerkmale ideal für den Unternehmenseinsatz eignet.
  • Um mit dem Token unter Linux zu arbeiten, müssen folgende Pakete installiert werden:
    libccid libpcsclite1 pcscd pcsc-tools opensc

Zwei-Faktor-Authentifizierung auf der Website unter Verwendung eines USB-Tokens. Jetzt auch für Linux

Ausstellung von Zertifikaten

In den vorherigen Artikeln gingen wir davon aus, dass die Zertifikate für Server und Clients mithilfe von Microsoft CA ausgestellt werden. Da wir jedoch alles unter Linux einrichten, werden wir auch eine alternative Methode zur Ausstellung dieser Zertifikate erläutern — direkt unter Linux.
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 im Befehlszeilenmodus mit den Tools OpenSSL und pkcs11-tool ausgeführt werden, aber aus Gründen der Einfachheit und Übersichtlichkeit werden wir diese hier nicht anführen.

Erste Schritte

  1. Wir installieren:
    $ apt-get install xca
  2. Und starten:
    $ xca
  3. Wir erstellen unsere Datenbank für die CA — /root/CA.xdb
    Wir empfehlen, die Datenbank der Zertifizierungsstelle in einem Verzeichnis zu speichern, auf das 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. Hauptakteur in diesem System ist die Root-Zertifizierungsstelle oder Root CA. Ihr Zertifikat sollte als erstes erstellt werden.

  1. Wir erstellen für die CA einen privaten RSA-2048-Schlüssel. Dafür wechseln wir auf den 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. Dafür wechseln wir zum Tab Zertifikate und klicken auf Neues Zertifikat.
  4. Unbedingt auswählen SHA-256, da die Verwendung von SHA-1 nicht mehr als sicher angesehen werden kann.
  5. Als Vorlage unbedingt auswählen [default] CA. Vergessen Sie nicht, auf Alles anwenden, sonst wird die Vorlage nicht angewendet.
  6. Auf dem Tab Betreff wählen Sie unser Schlüsselpaar aus. Dort können Sie auch alle wichtigen Felder des Zertifikats ausfüllen.

Zwei-Faktor-Authentifizierung auf der Website unter Verwendung eines USB-Tokens. Jetzt auch für Linux

Schlüsselpaar und Zertifikat für den HTTPS-Server erstellen

  1. Ebenso erstellen wir für den Server den privaten Schlüssel RSA-2048, den ich Server Key genannt habe.
  2. Bei der Erstellung 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 Alles anwenden.
  5. Woraufhin wir auf dem Tab Betreff unseren Schlüssel auswählen und die benötigten Felder ausfüllen.

Zwei-Faktor-Authentifizierung auf der Website unter Verwendung eines USB-Tokens. Jetzt auch für Linux

Schlüsselpaar und Zertifikat für den Benutzer erstellen

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

    Zwei-Faktor-Authentifizierung auf der Website unter Verwendung eines USB-Tokens. Jetzt auch für Linux

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

    Zwei-Faktor-Authentifizierung auf der Website unter Verwendung eines USB-Tokens. Jetzt auch für Linux

  8. Das Zertifikat für den Benutzer wird analog zum Serverzertifikat erstellt. Diesmal wählen wir die Vorlage [default] HTTPS_client und vergessen nicht zu klicken Alles anwenden.
  9. Auf dem Tab Betreff Geben Sie die Informationen über den Benutzer ein. Auf die Frage, ob das Zertifikat auf dem Token gespeichert werden soll, antworten wir mit Ja.

Am Ende sollte im Tab Zertifikate in XCA ein ungefähr solches Bild erscheinen.

Zwei-Faktor-Authentifizierung auf der Website unter Verwendung eines USB-Tokens. Jetzt auch für Linux
Dieser minimale Satz an Schlüsseln und Zertifikaten genügt, um mit der Konfiguration der Server selbst zu beginnen.

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

Dazu müssen wir den entsprechenden Eintrag im XCA auf dem entsprechenden Tab auswählen und auf drücken Export.

Nginx

Wie man einen nginx-Server installiert und startet, werde ich nicht beschreiben – zu diesem Thema gibt es genug Artikel im Internet, ganz zu schweigen von der offiziellen Dokumentation. Lassen Sie uns direkt mit der Konfiguration von HTTPS und der Zwei-Faktor-Authentifizierung über Token beginnen.

Fügen Sie im Abschnitt server in 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;
}

Detaillierte Beschreibungen aller Parameter zur SSL-Konfiguration in nginx 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 – bestimmt die Tiefe der Suche nach dem vertrauenswürdigen Root-Zertifikat in der Kette. Da unser Client-Zertifikat direkt von dem Root-Zertifikat signiert ist, ist die Tiefe auf 1 festgelegt. Wenn das Benutzerzertifikat von einer Zwischen-CA signiert wird, muss dieser Parameter auf 2 gesetzt werden, und so weiter.
  • ssl_client_certificate – gibt den Pfad zum vertrauenswürdigen Root-Zertifikat an, das bei der Überprüfung des Benutzerzertifikats verwendet wird.
  • ssl_certificate/ssl_certificate_key – geben den Pfad zum Serverzertifikat/privaten Schlüssel an.

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

Und das war's! Wie Sie sehen, ist die Konfiguration sehr einfach.

Überprüfen wir die Funktionalität in Firefox

Da wir alles vollständig unter Linux durchführen, nehmen wir an, dass auch unsere Benutzer in Linux arbeiten (wenn sie Windows haben, dann sehen Sie die Anleitung zur Konfiguration von Browsern im vorherigen Artikel.

  1. Starten wir Firefox.
  2. Versuchen wir zunächst, ohne Token zuzugreifen. Wir erhalten folgendes Bild:

    Zwei-Faktor-Authentifizierung auf der Website unter Verwendung eines USB-Tokens. Jetzt auch für Linux

  3. Gehen Sie zu about:preferences#privacy, und navigieren Sie zu Security Devices…
  4. Klicken Sie auf mit dem ausgewählten Testplan, um einen neuen PKCS#11 Device Driver hinzuzufügen und den Pfad zu unserer librtpkcs11ecp.so anzugeben.
  5. Um zu überprüfen, ob das Zertifikat erkannt wird, können Sie zum Certificate Manager. Es erscheint eine Aufforderung zur Eingabe des PIN-Codes. Nach korrekter Eingabe können Sie überprüfen, ob auf der Registerkarte Your Certificates unser Zertifikat vom Token angezeigt wird.
  6. Jetzt greifen wir mit dem Token zu. Firefox schlägt vor, ein Zertifikat auszuwählen, das auf dem Server verwendet werden soll. Wählen Sie unser Zertifikat aus.

    Zwei-Faktor-Authentifizierung auf der Website unter Verwendung eines USB-Tokens. Jetzt auch für Linux

  7. PROFIT!

    Zwei-Faktor-Authentifizierung auf der Website unter Verwendung eines USB-Tokens. Jetzt auch für Linux

Die Konfiguration erfolgt einmal, und wie im Fenster zur Zertifikatsanforderung zu sehen ist, können wir unsere Auswahl speichern. Bei jedem Login ins Portal müssen wir dann nur noch das Token eingeben und die Benutzer-PIN, die während der Formatierung festgelegt wurde. Nach dieser Authentifizierung weiß der Server bereits, welcher Benutzer sich angemeldet hat, und es sind keine weiteren Überprüfungsfenster mehr erforderlich, sodass der Benutzer direkt in sein persönliches Dashboard gelangt.

Apache

Wie bei nginx sollte auch bei der Installation von apache niemand auf Probleme stoßen. Wenn Sie jedoch nicht wissen, wie Sie diesen Webserver installieren, verwenden Sie einfach die offizielle Dokumentation.

Nun beginnen wir mit der Einrichtung unseres HTTPS und der Zwei-Faktor-Authentifizierung:

  1. Zunächst muss mod_ssl aktiviert werden:
    $ a2enmod ssl
  2. Und dann die standardmäßigen HTTPS-Einstellungen für die Website 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 können, stimmen die Namen der Parameter praktisch mit den Namen der Parameter in nginx überein, daher werde ich sie nicht erläutern. Wer jedoch an Einzelheiten interessiert ist, ist herzlich in der Dokumentation willkommen.
    Jetzt starten wir unseren Server neu:

    $ service apache2 reload
    $ service apache2 restart

  4. Wie Sie sehen können, ist es möglich, die Zwei-Faktor-Authentifizierung auf jedem Webserver, sowohl unter Windows als auch unter Linux, innerhalb einer Stunde einzurichten. Die Konfiguration des Browsers dauert etwa 5 Minuten. Viele glauben, dass die Einrichtung und Arbeit mit der Zwei-Faktor-Authentifizierung schwierig und unverständlich ist. Ich hoffe, dass unser Artikel dieses Missverständnis zumindest ein wenig ausräumt.

Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte einloggen.

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

  • Ja, TLS-GOST ist sehr notwendig

  • Nein, die Konfiguration mit GOST-Algorithmen ist nicht interessant

44 Benutzer haben abgestimmt. 9 Benutzer haben sich enthalten.

Quelle: habr.com

60GB SSD 8Gb DDR4