ProHoster > Blog > Verwaltung > 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
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
Installieren:
$ apt-get install xca
Und wir laufen:
$ xca
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.
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.
Legen Sie einen Namen für das neue Schlüsselpaar fest. Ich habe es CA Key genannt.
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.
Wählen Sie unbedingt aus SHA-256, da die Verwendung von SHA-1 nicht mehr als sicher angesehen werden kann.
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.
Auf der Registerkarte Erweitert Betreff Wählen Sie unser Schlüsselpaar. Dort können Sie alle wesentlichen Felder des Zertifikats ausfüllen.
Erstellen von Schlüsseln und eines https-Serverzertifikats
Auf ähnliche Weise erstellen wir einen privaten RSA-2048-Schlüssel für den Server, ich habe ihn Serverschlüssel genannt.
Beim Erstellen eines Zertifikats wählen wir aus, dass das Serverzertifikat mit einem CA-Zertifikat signiert sein muss.
Vergessen Sie nicht auszuwählen SHA-256.
Wir wählen als Vorlage [Standard] HTTPS_server. Klicke auf Alle anwenden.
Dann auf der Registerkarte Betreff Wählen Sie unseren Schlüssel aus und füllen Sie die erforderlichen Felder aus.
Erstellen Sie Schlüssel und Zertifikat für den Benutzer
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.
Hinzufügen eines neuen PKCS#11-Anbieters zu XCA. Gehen Sie dazu in das Menü Optionen zur Registerkarte PKCS#11-Anbieter.
мём Speichern und wählen Sie den Pfad zur PKCS#11-Bibliothek aus. In meinem Fall ist es usrliblibrtpkcs11ecp.so.
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.
PIN eingeben. Und wir warten auf den Abschluss der Hardware-Generierung des Schlüsselpaars
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.
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.
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:
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.
Versuchen wir zunächst, uns ohne Token anzumelden. Wir erhalten dieses Bild:
Gehe zu über: Präferenzen # Datenschutz, und wir gehen zu Sicherheitsgeräte…
мём Laden Sieum einen neuen PKCS#11-Gerätetreiber hinzuzufügen und den Pfad zu unserer librtpkcs11ecp.so anzugeben.
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.
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.
Gewinn!
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:
Zuerst müssen Sie mod_ssl aktivieren:
$ a2enmod ssl
Und aktivieren Sie dann die Standard-HTTPS-Einstellungen der Site:
$ a2ensite default-ssl
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
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.