So installieren und konfigurieren Sie SimpleSAMLphp für die SAML-Authentifizierung unter Ubuntu 16.04

Einführung

SimpleSAMPLphp ist eine Open-Source-PHP-Authentifizierungsanwendung, die Unterstützung für http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview bietet -2.0.html [SAML 2.0] als Service Provider (SP) oder Identity Provider (IdP).

_SAML (Security Assertion Markup Language) _ ist ein sicherer XML-basierter Kommunikationsmechanismus zum Austausch von Authentifizierungs- und Autorisierungsdaten zwischen Organisationen und Anwendungen. Es wird häufig zur Implementierung von Web-SSO (Single Sign On) verwendet. Dadurch entfällt die Notwendigkeit, mehrere Anmeldeinformationen für die Authentifizierung in mehreren Organisationen zu verwalten. Einfach ausgedrückt, können Sie eine Identität wie einen Benutzernamen und ein Kennwort verwenden, um auf mehrere Anwendungen zuzugreifen.

Eine Instanz von SimpleSAMLphp stellt eine Verbindung zu einer Authentifizierungsquelle her, bei der es sich um einen Identitätsanbieter wie LDAP oder eine Benutzerdatenbank handelt. Es authentifiziert Benutzer anhand dieser Authentifizierungsquelle, bevor der Zugriff auf Ressourcen gewährt wird, die von verknüpften Dienstanbietern bereitgestellt werden.

In diesem Tutorial installieren Sie SimpleSamplPHP und konfigurieren es so, dass eine MySQL-Datenbank als Authentifizierungsquelle verwendet wird. Sie speichern Benutzer und verschlüsselte Kennwörter in der MySQL-Datenbank und testen, ob Sie diese Benutzer zum Anmelden verwenden können.

Voraussetzungen

Schritt 1 - Herunterladen und Installieren von SimpleSAMLphp

Das Installieren von SimpleSAMLphp umfasst einige Schritte. Wir müssen die Software selbst sowie einige zusätzliche Komponenten und Voraussetzungen herunterladen. Wir müssen auch einige Änderungen an unserer Virtual Host-Konfiguration vornehmen.

Melden Sie sich bei Ihrem Server an, wenn Sie noch nicht angemeldet sind.

Laden Sie SimpleSAMLphp von der Projekt-Website herunter. SimpleSAMLphp verknüpft immer die neueste stabile Version ihrer Software mit derselben URL. Dies bedeutet, dass wir die neueste Version erhalten können, indem wir Folgendes eingeben:

wget https://simplesamlphp.org/download?latest

Dadurch wird eine komprimierte Datei mit dem Namen "+ download? Latest " heruntergeladen, die SimpleSAMLphp enthält. Extrahieren Sie den Inhalt mit dem Befehl ` tar +`:

tar zxf download?latest

Die Dateien werden in ein neues Verzeichnis mit der Bezeichnung "+ simplesamlphp-1. " Extrahiert, wobei "+" die aktuelle Versionsnummer ist. Verwenden Sie den Befehl + ls +, um die Datei zu identifizieren:

ls simplesamplphp-1*

Der Dateiname wird angezeigt:

Ouptutsimplesamlphp-

Kopieren Sie nun den Inhalt des Verzeichnisses mit dem Befehl + cp + nach + / var / simplesamlphp +. Stellen Sie sicher, dass Sie die Versionsnummer durch die Version ersetzen, die Sie haben:

sudo cp -a simplesamlphp-/. /var/simplesamlphp/

Der Schalter "+ -a +" stellt sicher, dass die Dateiberechtigungen zusammen mit den Dateien und Ordnern kopiert werden. Der Punkt am Ende der Quelldatei stellt sicher, dass alles im Quellverzeichnis, einschließlich versteckter Dateien, in das Zielverzeichnis kopiert wird.

Es gibt einige zusätzliche Softwarepakete, die SimpleSAMLphp benötigt, einschließlich PHP-Erweiterungen für die Arbeit mit XML, Mehrbyte-Strings, "+ curl +" und LDAP. Es erfordert auch memcached. Installieren Sie diese mit Ihrem Paketmanager.

Aktualisieren Sie zunächst Ihre Paketliste:

sudo apt-get update

Dann installiere die Pakete:

sudo apt-get install php-xml php-mbstring php-curl php-memcache php-ldap memcached

Starten Sie Apache nach Abschluss der Installation neu, um die neuen PHP-Erweiterungen zu aktivieren:

sudo systemctl restart apache2

Nachdem SimpleSAMLphp installiert ist, konfigurieren wir Apache für die Bereitstellung der Dateien.

Schritt 2 - Konfigurieren von Apache für SimpleSAMLphp

Sie haben bereits eine Domäne konfiguriert und auf diesen Server verwiesen und einen virtuellen Host für die Arbeit mit HTTPS eingerichtet, indem Sie Apache mit Let’s Encrypt sichern. Verwenden wir das, um SimpleSAMLphp bereitzustellen.

Das einzige SimpleSAMLphp-Verzeichnis, das für das Web sichtbar sein muss, ist "+ / var / simplesamlphp / www +". Bearbeiten Sie die SSL-Apache-Konfigurationsdatei des virtuellen Hosts für Ihre Domain, um sie für das Web verfügbar zu machen.

Wenn Ihre Virtual Host-Konfigurationsdatei den Namen "+ .conf" trägt, hat Letsencrypt eine neue Konfigurationsdatei mit dem Namen "+ -le-ssl.conf" erstellt, die HTTPS-Anforderungen für Ihre Domain verarbeitet. Öffnen Sie die SSL-Konfigurationsdatei mit dem folgenden Befehl, um die Datei zu bearbeiten. Achten Sie darauf, "++" durch den tatsächlichen Namen der Datei zu ersetzen:

sudo nano /etc/apache2/sites-available/-le-ssl.conf

Die Datei sollte wie folgt aussehen, obwohl die eigentliche Datei möglicherweise aussagekräftigere Kommentare enthält:

Ihre_Domäne-le-ssl.conf ’> / etc / apache2 / sites-available / -le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
       ServerName

       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/html

       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLCertificateFile /etc/letsencrypt/live//fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live//privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Die Direktive + ServerName + definiert hier die Basisdomäne, die für diese virtuelle Hostdefinition passen soll. Dies sollte der Domainname sein, für den Sie im Abschnitt * Voraussetzungen * ein SSL-Zertifikat eingerichtet haben. Fügen wir eine "+ Alias ​​" - Direktive hinzu, die SimpleSAMLphp für alle URLs steuert, die mit " https: /// simplesaml / * +" übereinstimmen. Fügen Sie dazu der Konfigurationsdatei die folgende Zeile hinzu:

Ihre_Domäne-le-ssl.conf ’> / etc / apache2 / sites-available / -le-ssl.conf

...
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html



...

Dies bedeutet, dass alle URLs, die mit "+ / simplesaml / * " übereinstimmen, in das Verzeichnis " / var / simplesamlphp / www +" geleitet werden, wodurch die SimpleSAMLphp-Steuerung ermöglicht wird.

Als nächstes gewähren wir den Zugriff auf das Verzeichnis "+ / var / simplesamlphp / www ", indem wir ein " Alle gewährten +" Zugriffsrechte dafür festlegen. Dadurch wird der SimpleSAMLphp-Dienst über das Web zugänglich. Fügen Sie dazu der Konfigurationsdatei Folgendes hinzu:

Ihre_Domäne-le-ssl.conf ’> / etc / apache2 / sites-available / -le-ssl.conf

...
 Alias /simplesaml /var/simplesamlphp/www



...

Speichern und schließen Sie die Datei. Starten Sie Apache neu, damit die Änderungen wirksam werden:

sudo systemctl restart apache2

Nachdem Apache für die Bereitstellung der Anwendungsdateien konfiguriert wurde, konfigurieren wir SimpleSAMLphp.

Schritt 3 - SimpleSAMLphp konfigurieren

Als nächstes müssen wir einige Änderungen an der SimpleSAMLphp-Kernkonfiguration vornehmen, die sich unter + / var / simplesamlphp / config / config.php + befindet. Öffnen Sie die Datei in Ihrem Editor:

nano /var/simplesamlphp/config/config.php

Legen Sie das Administratorkennwort fest, indem Sie die Zeile "" auth.adminpassword "" suchen und den Standardwert "++" durch ein sichereres Kennwort ersetzen. Mit diesem Passwort können Sie auf einige der Seiten in Ihrer SimpleSAMLphp-Installations-Weboberfläche zugreifen:

/var/simplesamlphp/config/config.php

. . .
'auth.adminpassword'        => '',
. . .

Legen Sie als Nächstes ein geheimes Salt fest, das eine zufällig generierte Zeichenfolge sein sollte. Einige Teile von SimpleSAMLphp verwenden dieses Salt, um kryptografisch sichere Hashes zu erstellen. Sie erhalten eine Fehlermeldung, wenn der Standardwert für das Salz nicht geändert wird.

Sie können die OpenSSL-Funktion "+ rand +" verwenden, um eine zufällige Zeichenfolge zu generieren, die Sie als Ihre geheime Salt-Zeichenfolge verwenden können. Öffnen Sie ein neues Terminal, stellen Sie erneut eine Verbindung zu Ihrem Server her und führen Sie den folgenden Befehl aus, um diese Zeichenfolge zu generieren:

openssl rand -base64 32

Die Option "+ -base64 32 +" stellt eine Base64-codierte Zeichenfolge mit 32 Zeichen sicher.

Suchen Sie dann in der Konfigurationsdatei den Eintrag "" Secretsalt "" und ersetzen Sie "++" durch die Zeichenfolge, die Sie generiert haben:

/var/simplesamlphp/config/config.php

. . .
'secretsalt' => '',
. . .

Stellen Sie dann die technischen Kontaktinformationen ein. Diese Informationen stehen in den generierten Metadaten zur Verfügung und SimpleSAMLphp sendet automatisch generierte Fehlerberichte an die von Ihnen angegebene E-Mail-Adresse. Suchen Sie den folgenden Abschnitt:

/var/simplesamlphp/config/config.php

. . .
'technicalcontact_name'     => '',
'technicalcontact_email'    => '',
. . .

Ersetzen Sie "" und "" durch entsprechende Werte.

Stellen Sie dann die Zeitzone ein, die Sie verwenden möchten. Suchen Sie diesen Abschnitt:

/var/simplesamlphp/config/config.php

. . .
'timezone' => ,
. . .

Ersetzen Sie ++ durch eine bevorzugte Zeitzone von this list of timezones for PHP. Stellen Sie sicher, dass Sie den Wert in Anführungszeichen setzen:

/var/simplesamlphp/config/config.php

. . .
'timezone' => ,
. . .

Speichern und schließen Sie die Datei. Sie sollten nun in Ihrem Browser auf die Site zugreifen können, indem Sie "+ https: /// simplesaml +" aufrufen. In Ihrem Browser wird der folgende Bildschirm angezeigt:

image: https: //assets.digitalocean.com/articles/simplesamplphp_1604/W6KphyN.png [simplesaml web interface]

Um sicherzustellen, dass Ihre PHP-Installation alle Anforderungen für einen reibungslosen Ablauf von SimpleSAMLphp erfüllt, wählen Sie die Registerkarte * Konfiguration * und klicken Sie auf den Link * Als Administrator anmelden *. Verwenden Sie dann das Administratorkennwort, das Sie in der Konfigurationsdatei in Schritt 3 festgelegt haben.

Nach dem Anmelden wird eine Liste der erforderlichen und optionalen PHP-Erweiterungen angezeigt, die von SimpleSAMLphp verwendet werden und die bereits auf Ihrem System installiert sind. Wenn in Ihrem Setup alle PHP-Erweiterungen installiert sind, sieht Ihr Bildschirm folgendermaßen aus:

Wenn Komponenten fehlen, lesen Sie dieses Tutorial und installieren Sie die fehlenden Komponenten, bevor Sie fortfahren.

Sie sehen auch einen Link mit der Aufschrift * Überprüfung der Integrität Ihres SimpleSAMLphp-Setups *. Klicken Sie auf diesen Link, um eine Liste der Überprüfungen anzuzeigen, die auf Ihr Setup angewendet wurden, um festzustellen, ob sie erfolgreich waren.

Lassen Sie uns fortfahren, um eine Authentifizierungsquelle für SimpleSAMLphp zu konfigurieren.

Schritt 4 - Konfigurieren der Authentifizierungsquelle

Nachdem wir SimpleSAMLphp installiert und eingerichtet haben, konfigurieren wir eine Authentifizierungsquelle, damit wir Benutzer authentifizieren können. Wir werden eine MySQL-Datenbank verwenden, um eine Liste von Benutzernamen und Passwörtern zu speichern, anhand derer die Authentifizierung erfolgt.

Melden Sie sich zunächst beim MySQL-Konto * root * an:

mysql -u root -p

Sie werden aufgefordert, das Kennwort für das MySQL-Root-Konto einzugeben. Stellen Sie es bereit, um fortzufahren.

Erstellen Sie als Nächstes eine Datenbank, die als Authentifizierungsquelle fungiert. Wir nennen es "+ auth +". Fühlen Sie sich frei, Ihren Namen anders zu nennen:

CREATE DATABASE  DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Jetzt erstellen wir einen separaten MySQL-Benutzer, der ausschließlich mit unserer "+ auth " - Datenbank arbeitet. Unter Verwaltungs- und Sicherheitsgesichtspunkten empfiehlt es sich, Datenbanken und Konten mit nur einer Funktion zu erstellen. Wir werden unseren Benutzer * authuser * nennen. Führen Sie den folgenden Befehl aus, um den Benutzer zu erstellen, ein Kennwort festzulegen und ihm Zugriff auf unsere " auth +" - Datenbank zu gewähren. Denken Sie daran, hier ein sicheres Kennwort für Ihren neuen Datenbankbenutzer anzugeben.

GRANT ALL ON .* TO ''@'localhost' IDENTIFIED BY '';

Erstellen Sie nun eine "+ user in" -Tabelle, die aus zwei Feldern besteht: "+ username" und "+ password _". Für zusätzliche Sicherheit verwenden wir die Funktion "+ MySQL AES_ENCRYPT () +", um die Kennwortzeichenfolge zu verschlüsseln, damit die Kennwörter nicht im Klartext gespeichert werden. Diese Funktion verschlüsselt eine Zeichenfolge und gibt eine Binärzeichenfolge zurück.

CREATE TABLE auth.users(username VARCHAR(30), password VARBINARY(30));

Fügen Sie dann drei Benutzer in die neu erstellte Tabelle ein. Hier verwenden wir die Funktion "+ AES_ENCRYPT () +", um die Werte für das Kennwortfeld zu verschlüsseln. Sie müssen eine Zeichenfolge angeben, die als Verschlüsselungsschlüssel verwendet wird. Stellen Sie sicher, dass Sie diese Zeichenfolge durch Ihre eigene Zeichenfolge ersetzen. Diese kann eine beliebige Zeichenfolge sein, solange sie komplex ist.

INSERT INTO auth.users(username, password) VALUES
('', AES_ENCRYPT('','')),
('', AES_ENCRYPT('','')),
('', AES_ENCRYPT('',''));

Verwenden Sie für jeden Benutzer denselben Schlüssel, und merken Sie sich den Schlüssel, damit Sie ihn später erneut verwenden können, um weitere Benutzer zu erstellen. Sie werden diesen geheimen Schlüssel auch in der SimpleSAMLphp-Konfiguration verwenden, damit Sie die Kennwörter entschlüsseln können, um sie mit den eingegebenen Kennwörtern zu vergleichen.

Wir müssen die Privilegien löschen, damit die aktuelle Instanz von MySQL über die letzten Privilegienänderungen informiert ist, die wir vorgenommen haben:

FLUSH PRIVILEGES;

Verlassen Sie die MySQL-Eingabeaufforderung, indem Sie Folgendes eingeben:

exit

Um die Identity Provider-Funktionalität in SimpleSAMLphp zu aktivieren, müssen wir die Datei + / var / simplesamlphp / config / config.php + bearbeiten. Es stehen verschiedene Optionen zur Verfügung. Da sich dieses Handbuch jedoch auf die SAML 2.0-Unterstützung konzentriert, möchten wir die Option + enable.saml20-idp + aktivieren. Öffnen Sie dazu die Datei + / var / simplesamlphp / config / config.php + und aktivieren Sie die SAML 2.0-Unterstützung:

nano /var/simplesamlphp/config/config.php

Suchen Sie diesen Abschnitt der Datei:

/var/simplesamlphp/config/config.php

...
'enable.saml20-idp' => ,
...

Ersetzen Sie "+ false" durch "+ true". Speichern Sie dann die Datei und beenden Sie den Editor.

Nachdem wir die Identity Provider-Funktionalität aktiviert haben, müssen wir das zu verwendende Authentifizierungsmodul angeben. Da wir eine Benutzertabelle in einer MySQL-Datenbank haben, werden wir das SQL-Authentifizierungsmodul verwenden. Öffnen Sie die Authsources-Konfigurationsdatei:

nano /var/simplesamlphp/config/authsources.php

Suchen Sie den folgenden Block, der auskommentiert ist:

/var/simplesamlphp/config/authsources.php

...
   /*
   'example-sql' => array(
       'sqlauth:SQL',
       'dsn' => 'pgsql:host=sql.example.org;port=5432;dbname=simplesaml',
       'username' => 'simplesaml',
       'password' => 'secretpassword',
       'query' => 'SELECT uid, givenName, email, eduPersonPrincipalName FROM users WHERE uid = :username AND password = SHA2(CONCAT((SELECT salt FROM users WHERE uid = :username), :password),256);',
   ),
   */
...

Dieser Code definiert eine Datenbankverbindung und eine Abfrage, mit der SimpleSAMLphp einen Benutzer in einer Datenbanktabelle mit dem Namen "+ users " nachschlagen kann. Wir müssen das Kommentarzeichen entfernen und die Abfrage ändern, um einen Benutzer mit der Funktion ` AES_DECRYPT () ` von MySQL aus unserer Tabelle zu suchen. Wir müssen der Funktion " AES_DECRYPT () +" denselben Schlüssel geben, den wir zum Verschlüsseln der Kennwörter in der Abfrage verwendet haben.

Ändern Sie den Abschnitt der Datei, um die Datenbankverbindungsdetails und die Abfrage anzugeben:

/var/simplesamlphp/config/authsources.php

...
   'example-sql' => array(
       'sqlauth:SQL',
       'dsn' => '',
       'username' => '',
       'password' => '',
       'query' => 'SELECT  FROM users WHERE  = :username AND password = :password',
   ),
...

Stellen Sie sicher, dass Sie den von Ihnen angegebenen geheimen Schlüssel anstelle von "++" platzieren.

Speichern und schließen Sie die Datei. Testen wir unseren Identitätsanbieter.

Schritt 5 - Testen des Identitätsanbieters mit der SAML 2.0 SP-Demo

Sie können die gerade eingerichtete MySQL-Authentifizierungsquelle testen, indem Sie zur Registerkarte * Authentifizierung * navigieren und auf den Link * Konfigurierte Authentifizierungsquellen testen * klicken. Sie erhalten eine Liste der bereits konfigurierten Authentifizierungsquellen.

image: https://assets.digitalocean.com/articles/simplesamplphp_1604/S5oJ8tr.png [Die Liste der konfigurierten Authentifizierungsquellen]

Klicken Sie auf * example-sql *, da dies der Anbieter ist, den Sie im vorherigen Schritt konfiguriert haben. Sie werden aufgefordert, einen Benutzernamen und ein Kennwort einzugeben. Geben Sie eine der drei Kombinationen aus Testbenutzer und Kennwort ein, die Sie in die MySQL-Benutzertabelle eingefügt haben. Versuchen Sie "+ user1 " mit dem Passwort " user1pass +".

Nach einem erfolgreichen Versuch wird die Seite * SAML 2.0 SP Demo Example * angezeigt:

Wenn Sie sich nicht anmelden können und wissen, dass das Kennwort korrekt ist, stellen Sie sicher, dass Sie denselben Schlüssel sowohl für die Funktion "+ AES_ENCRYPT () " beim Erstellen des Benutzers als auch für die Funktion " AES_DECRYPT () +" verwendet haben wenn Sie den Benutzer nachgeschlagen haben.

Sie können SimpleSAMLphp jetzt in Ihre eigenen Anwendungen integrieren, indem Sie der SimpleSAMLphp API documentation folgen.

Fazit

Sie haben jetzt die SimpleSAMLphp-Anwendung entsprechend auf Ihrem Ubuntu 16.04 VPS installiert und konfiguriert. Sie können weitere Möglichkeiten erkunden, indem Sie andere Identitäts- und Dienstanbieter hinzufügen. SimpleSAMLphp ermöglicht auch eine umfassende Anpassung der Benutzeroberfläche durch Theming. Weitere Informationen hierzu finden Sie unter theming docs.