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

Zwei-Faktor-Authentifizierung auf der Website mithilfe eines USB-Tokens. Jetzt auch für Linux
В einer unserer vorherigen Artikel Wir haben über die Bedeutung der Zwei-Faktor-Authentifizierung auf Unternehmensportalen von Unternehmen gesprochen. Beim letzten Mal haben wir gezeigt, wie man eine sichere Authentifizierung im IIS-Webserver einrichtet.

In den Kommentaren wurden wir gebeten, Anleitungen für die gängigsten Webserver für Linux – Nginx und Apache – zu schreiben.

Sie haben gefragt – wir haben geschrieben.

Was brauchen Sie, um loszulegen?

  • Jede moderne Linux-Distribution. Ich habe ein Test-Setup unter MX Linux 18.2_x64 durchgeführt. Dies ist natürlich keine Server-Distribution, aber es ist unwahrscheinlich, dass es Unterschiede für Debian gibt. Bei anderen Distributionen können die Pfade zu den Konfigurationsbibliotheken geringfügig variieren.
  • Zeichen. Wir verwenden das Modell weiterhin Rutoken EDS PKI, was hinsichtlich der Geschwindigkeitseigenschaften ideal für den Unternehmenseinsatz ist.
  • Um mit einem Token unter Linux arbeiten zu können, müssen Sie die folgenden Pakete installieren:
    libccid libpcsclite1 pcscd pcsc-tools opensc

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

Ausstellung von Zertifikaten

In früheren Artikeln haben wir uns darauf verlassen, dass Server- und Client-Zertifikate über Microsoft CA ausgestellt werden. Da wir aber alles unter Linux einrichten, verraten wir Ihnen auch eine alternative Möglichkeit, diese Zertifikate auszustellen – ohne Linux zu verlassen.
Wir werden XCA als CA verwenden (https://hohnstaedt.de/xca/), das auf jeder modernen Linux-Distribution verfügbar ist. Alle Aktionen, die wir in XCA ausführen werden, können im Befehlszeilenmodus mit den Dienstprogrammen OpenSSL und pkcs11-tool ausgeführt werden. Der Einfachheit und Klarheit halber werden wir sie in diesem Artikel jedoch nicht vorstellen.

Erste Schritte

  1. Installieren:
    $ apt-get install xca
  2. Und wir laufen:
    $ xca
  3. Wir erstellen unsere Datenbank für 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 Stammzertifikate zu schützen, die zum Signieren aller anderen Zertifikate verwendet werden.

Erstellen Sie Schlüssel und Root-CA-Zertifikat

Eine Public-Key-Infrastruktur (PKI) basiert auf einem hierarchischen System. Das Wichtigste in diesem System ist die Stammzertifizierungsstelle bzw. Stammzertifizierungsstelle. Sein Zertifikat muss zuerst erstellt werden.

  1. Wir erstellen einen privaten RSA-2048-Schlüssel für die CA. Klicken Sie dazu auf die Registerkarte Private Schlüssel drücken New Key und wählen Sie den entsprechenden Typ aus.
  2. Legen Sie einen Namen für das neue Schlüsselpaar fest. Ich habe es CA Key genannt.
  3. Das CA-Zertifikat selbst stellen wir anhand des erstellten Schlüsselpaares aus. Gehen Sie dazu auf die Registerkarte Zertifikate und drücken Sie Neues Zertifikat.
  4. Wählen Sie unbedingt aus SHA-256, da die Verwendung von SHA-1 nicht mehr als sicher angesehen werden kann.
  5. Stellen Sie sicher, dass Sie als Vorlage wählen [Standard] CA. Vergessen Sie nicht, auf zu klicken Alle anwenden, andernfalls wird die Vorlage nicht angewendet.
  6. Auf der Registerkarte Erweitert Betreff Wählen Sie unser Schlüsselpaar. Dort können Sie alle wesentlichen Felder des Zertifikats ausfüllen.

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

Erstellen von Schlüsseln und eines https-Serverzertifikats

  1. Auf ähnliche Weise erstellen wir einen privaten RSA-2048-Schlüssel für den Server, ich habe ihn Serverschlüssel genannt.
  2. Beim Erstellen eines Zertifikats wählen wir aus, dass das Serverzertifikat mit einem CA-Zertifikat signiert sein muss.
  3. Vergessen Sie nicht auszuwählen SHA-256.
  4. Wir wählen als Vorlage [Standard] HTTPS_server. Klicke auf Alle anwenden.
  5. Dann auf der Registerkarte Betreff Wählen Sie unseren Schlüssel aus und füllen Sie die erforderlichen Felder aus.

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

Erstellen Sie Schlüssel und Zertifikat für den Benutzer

  1. Der private Schlüssel des Benutzers wird auf unserem Token gespeichert. Um damit arbeiten zu können, müssen Sie die PKCS#11-Bibliothek von unserer Website installieren. Für gängige Distributionen vertreiben wir fertige Pakete, die sich hier befinden - https://www.rutoken.ru/support/download/pkcs/. Wir haben auch Assemblys für arm64, armv7el, armv7hf, e2k, mipso32el, die von unserem SDK heruntergeladen werden können – https://www.rutoken.ru/developers/sdk/. Neben Assemblies für Linux gibt es auch Assemblies für macOS, FreeBSD und Android.
  2. Hinzufügen eines neuen PKCS#11-Anbieters zu XCA. Gehen Sie dazu in das Menü Optionen zur Registerkarte PKCS#11-Anbieter.
  3. мём Speichern und wählen Sie den Pfad zur PKCS#11-Bibliothek aus. In meinem Fall ist es usrliblibrtpkcs11ecp.so.
  4. Wir benötigen ein formatiertes Rutoken EDS PKI-Token. Laden Sie das Dienstprogramm 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 <PIN-код пользователя>
  6. Als Schlüsseltyp wählen wir den RSA-2048-Schlüssel für die Rutoken EDS PKI. Ich habe diesen Schlüssel Client Key genannt.

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

  7. PIN eingeben. Und wir warten auf den Abschluss der Hardware-Generierung des Schlüsselpaars

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

  8. Analog zum Serverzertifikat erstellen wir ein Zertifikat für den Benutzer. Diesmal wählen wir eine Vorlage aus [Standard] HTTPS_client und vergessen Sie nicht zu klicken Alle anwenden.
  9. Auf der Registerkarte Erweitert Betreff Geben Sie Informationen über den Benutzer ein. Die Bitte, das Zertifikat für den Token aufzubewahren, beantworten wir mit Ja.

Als Ergebnis auf der Registerkarte Zertifikate in XCA sollten Sie so etwas bekommen.

Zwei-Faktor-Authentifizierung auf der Website mithilfe eines USB-Tokens. Jetzt auch für Linux
Dieser Mindestsatz an Schlüsseln und Zertifikaten reicht aus, um mit der Einrichtung der Server selbst zu beginnen.

Zur Konfiguration müssen wir das CA-Zertifikat, das Serverzertifikat und den privaten Serverschlüssel exportieren.

Wählen Sie dazu den gewünschten Eintrag auf der entsprechenden Registerkarte in XCA aus und klicken Sie Exportieren.

Nginx

Ich werde nicht schreiben, wie man einen Nginx-Server installiert und betreibt – es gibt genügend Artikel zu diesem Thema im Internet, ganz zu schweigen von der offiziellen Dokumentation. Kommen wir gleich zur Einrichtung von HTTPS und der Zwei-Faktor-Authentifizierung mithilfe eines Tokens.

Fügen Sie die folgenden Zeilen zum Serverabschnitt in nginx.conf 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 im Zusammenhang mit der Konfiguration von SSL in Nginx finden Sie hier - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Ich werde nur kurz diejenigen beschreiben, die ich mir gefragt habe:

  • ssl_verify_client – ​​gibt an, dass die Vertrauenskette für das Zertifikat überprüft werden muss.
  • ssl_verify_length – Definiert die Suchtiefe für das vertrauenswürdige Stammzertifikat in der Kette. Da unser Client-Zertifikat sofort auf dem Stammzertifikat signiert wird, wird die Tiefe auf 1 gesetzt. Wenn das Benutzerzertifikat auf einer Zwischen-CA signiert ist, muss in diesem Parameter 2 angegeben werden, und so weiter.
  • ssl_client_certificate – gibt den Pfad zum vertrauenswürdigen Stammzertifikat an, das bei der Überprüfung der Vertrauenswürdigkeit im Zertifikat des Benutzers verwendet wird.
  • ssl_certificate/ssl_certificate_key – Geben Sie den Pfad zum Serverzertifikat/privaten Schlüssel an.

Vergessen Sie nicht, nginx -t auszuführen, um zu überprüfen, ob die Konfiguration keine Tippfehler enthält und alle Dateien am richtigen Ort sind usw.

Und das ist alles! Wie Sie sehen, ist die Einrichtung sehr einfach.

Überprüfen Sie, ob es in Firefox funktioniert

Da wir alles komplett unter Linux machen, gehen wir davon aus, dass unsere Benutzer auch unter Linux arbeiten (sofern sie Windows haben). Anweisungen zum Einrichten von Browsern finden Sie im vorherigen Artikel.

  1. Starten wir Firefox.
  2. Versuchen wir zunächst, uns ohne Token anzumelden. Wir erhalten dieses Bild:

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

  3. Gehe zu über: Präferenzen # Datenschutz, und wir gehen zu Sicherheitsgeräte…
  4. мём Laden Sieum einen neuen PKCS#11-Gerätetreiber hinzuzufügen und den Pfad zu unserer librtpkcs11ecp.so anzugeben.
  5. Um zu überprüfen, ob das Zertifikat sichtbar ist, können Sie zu gehen Certificate Manager. Sie werden aufgefordert, Ihre PIN einzugeben. Nach korrekter Eingabe können Sie überprüfen, was sich auf der Registerkarte befindet Ihre Zertifikate Unser Zertifikat vom Token erschien.
  6. Kommen wir nun zum Token. Firefox fordert Sie auf, ein Zertifikat auszuwählen, das für den Server ausgewählt wird. Wählen Sie unser Zertifikat.

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

  7. Gewinn!

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

Die Einrichtung ist einmalig erledigt und wie Sie im Zertifikatsanforderungsfenster sehen können, können wir unsere Auswahl speichern. Danach müssen wir bei jeder Anmeldung am Portal nur noch einen Token einführen und den bei der Formatierung angegebenen Benutzer-PIN-Code eingeben. Nach einer solchen Authentifizierung weiß der Server bereits, welcher Benutzer sich angemeldet hat und Sie können keine weiteren Fenster zur Verifizierung mehr erstellen, sondern den Benutzer sofort in sein persönliches Konto einlassen.

Apache

Genau wie bei Nginx sollte niemand Probleme bei der Installation von Apache haben. Wenn Sie nicht wissen, wie Sie diesen Webserver installieren, verwenden Sie einfach die offizielle Dokumentation.

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

  1. Zuerst müssen Sie mod_ssl aktivieren:
    $ a2enmod ssl
  2. Und aktivieren Sie dann die Standard-HTTPS-Einstellungen der Site:
    $ 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 praktisch mit den Namen der Parameter in Nginx überein, daher werde ich sie nicht erklären. Auch hier ist jeder, der sich für die Details interessiert, zur Dokumentation herzlich willkommen.
    Jetzt starten wir unseren Server neu:

    $ service apache2 reload
    $ service apache2 restart

  4. Wie Sie sehen, dauert die Einrichtung der Zwei-Faktor-Authentifizierung auf jedem Webserver, egal ob unter Windows oder Linux, maximal eine Stunde. Und das Einrichten von Browsern dauert etwa 5 Minuten. Viele Leute denken, dass die Einrichtung und Arbeit mit der Zwei-Faktor-Authentifizierung schwierig und unklar ist. Ich hoffe, dass unser Artikel diesen Mythos zumindest ein wenig entlarvt.

An der Umfrage können nur registrierte Benutzer teilnehmen. Einloggenbitte.

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

  • Ja, TLS-GOST ist sehr notwendig

  • Nein, das Tuning mit GOST-Algorithmen ist nicht interessant

44 Benutzer haben abgestimmt. 9 Benutzer enthielten sich der Stimme.

Source: habr.com

Kommentar hinzufügen