In
einem unserer vorherigen Artikel haben wir über die Bedeutung der Zwei-Faktor-Authentifizierung auf Unternehmensportalen von Unternehmen gesprochen. Beim letzten Mal haben wir gezeigt, wie die sichere Authentifizierung auf dem IIS-Webserver konfiguriert wird.
In den Kommentaren wurden wir gebeten, Anweisungen für die gängigsten Webserver für Linux zu schreiben - Nginx und Apache.
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 sicherlich keine Serververteilung, aber es gibt kaum Unterschiede für Debian. Bei anderen Distributionen können die Pfade zu Bibliotheken / Konfigurationen geringfügig variieren.
- Token. Wir verwenden weiterhin das PKI Rutoken EDS- Modell, das sich ideal für die Hochgeschwindigkeitsleistung von Unternehmensanwendungen eignet.
- Um mit dem Token unter Linux arbeiten zu können, müssen Sie die folgenden Pakete installieren:
libccid libpcsclite1 pcscd pcsc-tools opensc
Zertifikat schreiben
In früheren Artikeln haben wir uns darauf verlassen, dass Server- und Client-Zertifikate mit Microsoft CA ausgestellt werden. Da wir jedoch alles unter Linux konfigurieren, werden wir gleichzeitig über eine alternative Möglichkeit sprechen, diese Zertifikate auszustellen - ohne Linux zu verlassen.
Als Zertifizierungsstelle verwenden wir XCA (
https://hohnstaedt.de/xca/ ), das in jeder modernen Linux-Distribution verfügbar ist. Alle Aktionen, die wir in XCA ausführen, können auch im Befehlszeilenmodus mit den Dienstprogrammen OpenSSL und pkcs11-tool ausgeführt werden. Der Einfachheit und Klarheit halber werden wir sie in diesem Artikel nicht angeben.
Erste Schritte
- Installieren:
$ apt-get install xca
- Und lauf:
$ xca
- Wir erstellen unsere Datenbank für CA - /root/CA.xdb
Es wird empfohlen, die Datenbank der Zertifizierungsstelle in einem Ordner zu speichern, auf den nur der Administrator Zugriff hat. Dies ist wichtig, um die privaten Schlüssel von Stammzertifikaten zu schützen, mit denen alle anderen Zertifikate signiert werden.
Erstellen Sie Schlüssel und Stammzertifizierungsstellenzertifikat
Die Public-Key-Infrastruktur (PKI) basiert auf einem hierarchischen System. Zentral für dieses System ist die Root-Zertifizierungsstelle oder die Root-Zertifizierungsstelle. Sein Zertifikat muss zuerst erstellt werden.
- Wir erstellen den privaten Schlüssel RSA-2048 für CA. Klicken Sie dazu auf der Registerkarte Private Keys auf New Key und wählen Sie den entsprechenden Typ aus.
- Legen Sie einen Namen für das neue Schlüsselpaar fest. Ich habe es genannt - CA Key.
- Wir schreiben das CA-Zertifikat selbst mit dem erstellten Schlüsselpaar aus. Wechseln Sie dazu zur Registerkarte Zertifikate und klicken Sie auf Neues Zertifikat .
- Wählen Sie unbedingt SHA-256 , da die Verwendung von SHA-1 nicht mehr als sicher angesehen werden kann.
- Stellen Sie als Vorlage sicher, dass Sie [Standard] CA auswählen. Vergessen Sie nicht, auf Alle anwenden zu klicken, da sonst die Vorlage nicht angewendet wird.
- Wählen Sie auf der Registerkarte Betreff unser Schlüsselpaar aus. Dort können Sie alle Hauptfelder des Zertifikats ausfüllen.
Erstellen Sie Schlüssel und ein https-Serverzertifikat
- In ähnlicher Weise erstellen wir den privaten RSA-2048-Schlüssel für den Server, den ich als Serverschlüssel bezeichnet habe.
- Beim Erstellen des Zertifikats wählen wir aus, dass das Serverzertifikat auf dem CA-Zertifikat signiert sein muss.
- Vergessen Sie nicht, SHA-256 zu wählen.
- Wählen Sie als Vorlage [Standard] HTTPS_server aus . Klicken Sie auf Alle anwenden .
- Wählen Sie dann auf der Registerkarte Betreff unseren Schlüssel aus und füllen Sie die erforderlichen Felder aus.

Wir erstellen Schlüssel und das Zertifikat für den Benutzer
- Der private Schlüssel des Benutzers wird auf unserem Token gespeichert. Um damit zu arbeiten, müssen Sie die PKCS # 11-Bibliothek von unserer Site installieren. Für beliebte Distributionen verteilen wir fertige Pakete, die hier liegen - https://www.rutoken.ru/support/download/pkcs/ . Wir haben auch Assemblys für arm64, armv7el, armv7hf, e2k, mipso32el, die in unserem SDK aufgenommen werden können - https://www.rutoken.ru/developers/sdk/ . Neben Assemblys für Linux gibt es auch Assemblys für MacOS, Freebsd und Android.
- Fügen Sie dem XCA den neuen PKCS # 11-Anbieter hinzu. Wechseln Sie dazu auf der Registerkarte PKCS # 11 Provider zum Menü Options .
- Klicken Sie auf Hinzufügen und wählen Sie den Pfad zur PKCS # 11-Bibliothek aus. In meinem Fall ist es \ usr \ lib \ librtpkcs11ecp.so.
- Wir benötigen eine formatierte Token Rutoken EDS PKI. Laden Sie das Dienstprogramm rtAdmin herunter - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
- Wir führen aus
$ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN- >
- Als Schlüsseltyp wählen wir den RSA-2048-Schlüssel auf dem PKI Rutoken EDS. Ich habe diesen Schlüssel Client Key genannt.
- Geben Sie den PIN-Code ein. Und wir warten auf den Abschluss der Hardware-Generierung des Schlüsselpaars
- Wir erstellen das Zertifikat für den Benutzer in Analogie zum Serverzertifikat. Wählen Sie dieses Mal die Vorlage [Standard] HTTPS_client aus und vergessen Sie nicht, auf Alle anwenden zu klicken.
- Geben Sie auf der Registerkarte Betreff Benutzerinformationen ein. Wir bejahen die Aufforderung, das Zertifikat für das Token zu speichern.
Daher sollten Sie auf der Registerkarte
Zertifikate in XCA so etwas erhalten.
Dieser Mindestsatz an Schlüsseln und Zertifikaten reicht aus, um die Server direkt einzurichten.
Zum Konfigurieren müssen das CA-Zertifikat, das Serverzertifikat und der private Serverschlüssel exportiert werden.
Wählen Sie dazu den gewünschten Eintrag auf der entsprechenden Registerkarte im XCA aus und klicken Sie auf
Exportieren .
Nginx
Wie man einen Nginx-Server installiert und ausführt, werde ich nicht schreiben - es gibt genügend Artikel im Internet zu diesem Thema, ganz zu schweigen von der offiziellen Dokumentation. Kommen wir zum Einrichten der HTTPS- und Zwei-Faktor-Token-Authentifizierung.
Fügen Sie dem Serverabschnitt in der Datei 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 im Zusammenhang mit der SSL-Konfiguration in Nginx finden Sie hier -
https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificateIch werde nur kurz diejenigen beschreiben, die ich selbst gefragt habe:
- ssl_verify_client - Gibt an, dass die Zertifikatsvertrauenskette überprüft werden muss.
- ssl_verify_depth - Bestimmt die Tiefe der Suche nach vertrauenswürdigen Stammzertifikaten in der Kette. Da unser Client-Zertifikat sofort im Stammzertifikat signiert wird, wird die Tiefe auf 1 festgelegt. Wenn das Benutzerzertifikat auf einer Zwischenzertifizierungsstelle signiert ist, muss in diesem Parameter 2 angegeben werden, und so weiter.
- ssl_client_certificate - Gibt den Pfad zum vertrauenswürdigen Stammzertifikat an, mit dem das Vertrauen in das Benutzerzertifikat überprüft 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 bei Bedarf vorhanden sind und so weiter.
Und eigentlich alles! Wie Sie sehen können, ist die Einrichtung sehr einfach.
Überprüfen der Arbeit in Firefox
Da wir alles komplett unter Linux machen, gehen wir davon aus, dass unsere Benutzer auch unter Linux arbeiten (wenn sie Windows haben, lesen
Sie die Anweisungen zum Einrichten von Browsern im vorherigen Artikel .
- Wir starten Firefox.
- Versuchen wir, uns zu Beginn ohne Token anzumelden. Wir bekommen folgendes Bild:
- Gehen Sie zu ungefähr: Einstellungen # Datenschutz und gehen Sie zu Sicherheitsgeräte ...
- Klicken Sie auf Laden , um den 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 zum Zertifikat-Manager wechseln . Sie werden aufgefordert, einen PIN-Code einzugeben. Nach der korrekten Eingabe können Sie überprüfen, ob auf der Registerkarte Ihre Zertifikate unser Zertifikat mit einem Token angezeigt wurde.
- Jetzt gehen wir mit dem Token. Firefox schlägt vor, ein Zertifikat auszuwählen, das auf dem Server ausgewählt wird. Wählen Sie unser Zertifikat.
- GEWINN!
Das Setup wird einmal durchgeführt. Wie Sie im Fenster für die Zertifikatsanforderung sehen können, können wir unsere Auswahl speichern. Danach müssen wir bei jedem Betreten des Portals nur noch ein Token einfügen und den PIN-Code des Benutzers eingeben, der während der Formatierung festgelegt wurde. Nach einer solchen Authentifizierung weiß der Server bereits, welcher Benutzer sich angemeldet hat, und Sie können keine zusätzlichen Fenster mehr zur Überprüfung erstellen, sondern den Benutzer sofort in sein persönliches Konto aufnehmen.
Apache
Wie bei Nginx sollte niemand Probleme haben, Apache zu installieren. Wenn Sie nicht wissen, wie dieser Webserver installiert wird, verwenden Sie einfach die offizielle Dokumentation.
Und wir beginnen mit der Konfiguration unserer HTTPS- und Zwei-Faktor-Authentifizierung:
- Zuerst müssen Sie mod_ssl aktivieren:
$ a2enmod ssl
- Aktivieren Sie anschließend die Standardeinstellungen für die HTTPS-Site:
$ a2ensite default-ssl
- Bearbeiten Sie nun 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 fast mit den Namen der Parameter in Nginx überein, daher werde ich sie nicht erklären. Auch hier jeder, der sich für Details interessiert - willkommen in der Dokumentation.
Starten Sie jetzt unseren Server neu:
$ service apache2 reload $ service apache2 restart
Wie Sie sehen können, konfigurieren Sie die Zwei-Faktor-Authentifizierung auf jedem Webserver, unter Windows und unter Linux maximal eine Stunde. Das Einrichten von Browsern dauert ca. 5 Minuten. Viele Leute denken, dass das Einrichten und Arbeiten mit der Zwei-Faktor-Authentifizierung schwierig und unverständlich ist. Ich hoffe unser Artikel zumindest ein wenig, aber diesen Mythos zu entlarven.