Как установить и настроить SimpleSAMLphp для аутентификации SAML в Ubuntu 16.04

Вступление

SimpleSAMPLphp - приложение аутентификации PHP с открытым исходным кодом, которое обеспечивает поддержку http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview. -2.0.html [SAML 2.0] в качестве поставщика услуг (SP) или поставщика удостоверений (IdP).

_SAML (Security Assertion Markup Language) _ - это безопасный механизм связи на основе XML для обмена данными аутентификации и авторизации между организациями и приложениями. Он часто используется для реализации единого входа в Интернет. Это устраняет необходимость поддерживать несколько учетных данных для проверки подлинности в разных организациях. Проще говоря, вы можете использовать один идентификатор, например имя пользователя и пароль, для доступа к нескольким приложениям.

Экземпляр SimpleSAMLphp подключается к источнику authentication, который является провайдером идентификации, таким как LDAP или база данных пользователей. Он проверяет подлинность пользователей на основе этого источника проверки подлинности, прежде чем предоставить доступ к ресурсам, доступным у связанных поставщиков услуг.

В этом учебном пособии вы установите SimpleSamplPHP и настроите его для использования базы данных MySQL в качестве источника аутентификации. Вы будете хранить пользователей и зашифрованные пароли в базе данных MySQL и проверять, что вы можете использовать этих пользователей для входа в систему.

Предпосылки

Шаг 1 - Загрузка и установка SimpleSAMLphp

Установка SimpleSAMLphp включает в себя пару шагов. Мы должны загрузить само программное обеспечение, а также несколько дополнительных компонентов и предварительных условий. Нам также необходимо внести некоторые изменения в конфигурацию нашего виртуального хоста.

Войдите на свой сервер, если вы еще не вошли в систему.

Загрузите SimpleSAMLphp с веб-сайта проекта. SimpleSAMLphp всегда связывает последнюю стабильную версию своего программного обеспечения с одним и тем же URL. Это означает, что мы можем получить последнюю версию, набрав это:

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

Это загрузит сжатый файл с именем + download? Latest +, который содержит SimpleSAMLphp. Извлеките содержимое с помощью команды + tar +:

tar zxf download?latest

Файлы будут извлечены в новый каталог с названием + simplesamlphp-1. +, Где ++ - номер текущей версии. Используйте команду + ls + для определения файла:

ls simplesamplphp-1*

Вы увидите отображаемое имя файла:

Ouptutsimplesamlphp-

Теперь скопируйте содержимое каталога в + / var / simplesamlphp + с помощью команды + cp +. Обязательно замените номер версии на имеющуюся у вас версию:

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

Переключатель + -a + обеспечивает копирование прав доступа к файлам вместе с файлами и папками. Точка в конце исходного файла гарантирует, что все в исходном каталоге, включая скрытые файлы, будет скопировано в целевой каталог.

Существует несколько дополнительных программных пакетов, в которых нуждается SimpleSAMLphp, включая расширения PHP для работы с XML, многобайтовые строки, + curl + и LDAP. Требуется также memcached. Установите их, используя менеджер пакетов.

Сначала обновите список ваших пакетов:

sudo apt-get update

Затем установите пакеты:

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

После завершения установки перезапустите Apache, чтобы активировать новые расширения PHP:

sudo systemctl restart apache2

Теперь, когда SimpleSAMLphp установлен, давайте настроим Apache для обслуживания файлов.

Шаг 2 - Настройка Apache для обслуживания SimpleSAMLphp

Вы уже настроили домен и указали на этот сервер, и вы настроили виртуальный хост для работы с HTTPS, обеспечив безопасность Apache с помощью функции Let Encrypt. Давайте использовать это для обслуживания SimpleSAMLphp.

Единственный каталог SimpleSAMLphp, который должен быть виден в Интернете, это + / var / simplesamlphp / www +. Чтобы открыть его для Интернета, отредактируйте файл конфигурации Apache Virtual Host SSL для своего домена.

Если файл конфигурации вашего виртуального хоста называется + .conf +, Let’s Encrypt создал новый файл конфигурации под названием + -le-ssl.conf +, который обрабатывает запросы HTTPS для вашего домена. Откройте файл конфигурации SSL с помощью следующей команды для редактирования файла. Обязательно замените ++ на фактическое имя файла:

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

Файл должен выглядеть следующим образом, хотя сам файл может содержать более описательные комментарии:

your_domain-ле-ssl.conf»> / и т.д. / apache2 / сайты-доступные / -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>

Директива + ServerName + здесь определяет базовый домен, который должен соответствовать этому определению виртуального хоста. Это должно быть имя домена, для которого вы настроили сертификат SSL в разделе * Предварительные условия *. Давайте добавим директиву + Alias ​​+, которая дает контроль SimpleSAMLphp для всех URL-адресов, соответствующих + https: /// simplesaml / * +. Для этого добавьте следующую строку в файл конфигурации:

your_domain-ле-ssl.conf»> / и т.д. / apache2 / сайты-доступные / -le-ssl.conf

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



...

Это означает, что все URL-адреса, соответствующие + / simplesaml / * +, будут направлены в каталог + / var / simplesamlphp / www +, дающий элемент управления SimpleSAMLphp.

Далее мы предоставим доступ к каталогу + / var / simplesamlphp / www +, указав для него + Требовать все предоставленное + управление доступом. Это сделает службу SimpleSAMLphp доступной через Интернет. Сделайте это, добавив в файл конфигурации следующее:

your_domain-ле-ssl.conf»> / и т.д. / apache2 / сайты-доступные / -le-ssl.conf

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



...

Сохраните и закройте файл. Перезапустите Apache, чтобы изменения вступили в силу:

sudo systemctl restart apache2

Теперь, когда Apache настроен для обслуживания файлов приложения, давайте настроим SimpleSAMLphp.

Шаг 3 - Настройка SimpleSAMLphp

Затем нам нужно внести несколько изменений в базовую конфигурацию SimpleSAMLphp, расположенную в + / var / simplesamlphp / config / config.php +. Откройте файл в вашем редакторе:

nano /var/simplesamlphp/config/config.php

Установите пароль администратора, найдя строку + 'auth.adminpassword' + и заменив значение по умолчанию ++ на более безопасный пароль. Этот пароль позволяет вам получить доступ к некоторым страницам вашего веб-интерфейса установки SimpleSAMLphp:

/var/simplesamlphp/config/config.php

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

Затем установите секретную соль, которая должна быть случайно сгенерированной строкой символов. Некоторые части SimpleSAMLphp используют эту соль для создания криптографически безопасных хэшей. Вы получите ошибки, если соль не изменится со значения по умолчанию.

Вы можете использовать функцию OpenSSL + rand + для генерации случайной строки для использования в качестве вашей секретной строки соли. Откройте новый терминал, снова подключитесь к вашему серверу и выполните следующую команду, чтобы сгенерировать эту строку:

openssl rand -base64 32

Опция + -base64 32 + обеспечивает строку в кодировке Base64 длиной 32 символа.

Затем в файле конфигурации найдите запись + 'secretsalt' + и замените ++ на сгенерированную вами строку:

/var/simplesamlphp/config/config.php

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

Затем установите техническую контактную информацию. Эта информация будет доступна в сгенерированных метаданных, и SimpleSAMLphp отправит автоматически сгенерированные отчеты об ошибках на указанный вами адрес электронной почты. Найдите следующий раздел:

/var/simplesamlphp/config/config.php

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

Замените ` и ` соответствующими значениями.

Затем установите часовой пояс, который вы хотели бы использовать. Найдите этот раздел:

/var/simplesamlphp/config/config.php

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

Замените ++ предпочитаемым часовым поясом из this списка часовых поясов для PHP. Не забудьте заключить значение в кавычки:

/var/simplesamlphp/config/config.php

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

Сохраните и закройте файл. Теперь вы сможете получить доступ к сайту в своем браузере, посетив + https: /// simplesaml +. Вы увидите следующий экран в вашем браузере:

изображение: https: //assets.digitalocean.com/articles/simplesamplphp_1604/W6KphyN.png [веб-интерфейс simplesaml]

Чтобы убедиться, что ваша установка PHP отвечает всем требованиям для бесперебойной работы SimpleSAMLphp, выберите вкладку * Configuration * и нажмите ссылку * Login as administrator *. Затем используйте пароль администратора, который вы установили в файле конфигурации на шаге 3.

После входа в систему вы увидите список необходимых и дополнительных расширений PHP, используемых SimpleSAMLphp, и какие из них уже установлены в вашей системе. Если в вашей установке установлены все расширения PHP, ваш экран будет выглядеть следующим образом:

изображение: https: //assets.digitalocean.com/articles/simplesamplphp_1604/I8iLFjy.png [Все расширения установлены]

Если отсутствуют какие-либо компоненты, просмотрите этот учебник и установите недостающие компоненты, прежде чем двигаться дальше.

Вы также увидите ссылку, которая говорит * Проверка работоспособности вашей установки SimpleSAMLphp *. Нажмите на эту ссылку, чтобы получить список проверок, примененных к вашей настройке, чтобы увидеть, успешны ли они.

Давайте перейдем к настройке источника аутентификации для SimpleSAMLphp.

Шаг 4 - Настройка источника аутентификации

Теперь, когда мы установили и настроили SimpleSAMLphp, давайте настроим источник аутентификации, чтобы мы могли аутентифицировать пользователей. Мы будем использовать базу данных MySQL для хранения списка имен пользователей и паролей для аутентификации.

Чтобы начать, войдите в учетную запись MySQL * root *:

mysql -u root -p

Вам будет предложено ввести пароль учетной записи root MySQL. Предоставьте это, чтобы продолжить.

Затем создайте базу данных, которая будет служить источником аутентификации. Мы назовем это + auth +. Не стесняйтесь называть свои по-другому:

CREATE DATABASE  DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Теперь давайте создадим отдельного пользователя MySQL для работы исключительно с нашей базой данных + auth +. С точки зрения управления и безопасности рекомендуется создавать однофункциональные базы данных и учетные записи. Мы назовем нашего пользователя * authuser *. Выполните следующую команду, чтобы создать пользователя, установить пароль и предоставить ему доступ к нашей базе данных + auth +. Не забудьте указать здесь надежный пароль для вашего нового пользователя базы данных.

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

Теперь создайте таблицу + user use, которая будет состоять из двух полей:` + username` и + password _. Для дополнительной безопасности мы будем использовать функцию + MySQL AES_ENCRYPT () + для шифрования строки пароля, чтобы мы не хранили пароли в виде простого текста. Эта функция шифрует строку и возвращает двоичную строку.

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

Затем вставьте трех пользователей во вновь созданную таблицу. Здесь мы будем использовать функцию + AES_ENCRYPT () +, чтобы зашифровать значения для поля пароля. Вам необходимо указать строку, которая используется в качестве ключа шифрования. Обязательно замените это вашей собственной строкой, которая может быть любой строкой, которая вам нравится, если она сложная.

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

Используйте один и тот же ключ для каждого пользователя и обязательно запомните ключ, чтобы вы могли использовать его снова для создания дополнительных пользователей в будущем. Вы также будете использовать этот секретный ключ в конфигурации SimpleSAMLphp, чтобы вы могли расшифровать пароли, чтобы сравнить их с теми, которые вводят люди.

Нам нужно сбросить привилегии, чтобы текущий экземпляр MySQL знал о последних изменениях привилегий, которые мы сделали:

FLUSH PRIVILEGES;

Выйдите из приглашения MySQL, набрав:

exit

Чтобы включить функцию провайдера идентификации в SimpleSAMLphp, нам нужно отредактировать файл + / var / simplesamlphp / config / config.php +. Доступно несколько опций, но, поскольку это руководство сфокусировано на поддержке SAML 2.0, мы хотим включить опцию + enable.saml20-idp +. Для этого откройте + / var / simplesamlphp / config / config.php + и включите поддержку SAML 2.0:

nano /var/simplesamlphp/config/config.php

Найдите этот раздел файла:

/var/simplesamlphp/config/config.php

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

Замените + false на` + true`. Затем сохраните файл и выйдите из редактора.

Теперь, когда у нас включена функция провайдера идентификации, нам нужно указать модуль аутентификации, который будет использоваться. Поскольку у нас есть таблица пользователей в базе данных MySQL, мы собираемся использовать модуль аутентификации SQL. Откройте файл конфигурации authsources:

nano /var/simplesamlphp/config/authsources.php

Найдите следующий блок, который закомментирован:

/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);',
   ),
   */
...

Этот код определяет соединение с базой данных и запрос, который SimpleSAMLphp может использовать для поиска пользователя в таблице базы данных, называемой + users +. Нам нужно раскомментировать его и изменить запрос для поиска пользователя из нашей таблицы с помощью функции MySQL + AES_DECRYPT () +. Нам нужно предоставить функции + AES_DECRYPT () + тот же ключ, который мы использовали для шифрования паролей в запросе.

Измените раздел файла, указав сведения о соединении с базой данных и запрос:

/var/simplesamlphp/config/authsources.php

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

Обязательно поместите указанный вами секретный ключ вместо ++.

Сохраните и закройте файл. Давайте проверим наш провайдер идентификации.

Шаг 5 - Тестирование провайдера идентификации с помощью SAML 2.0 SP Demo

Вы можете протестировать источник аутентификации MySQL, который вы только что установили, перейдя на вкладку * Authentication * и нажав ссылку * Test сконфигурированные источники аутентификации *. Вам будет представлен список настроенных источников аутентификации.

изображение: https: //assets.digitalocean.com/articles/simplesamplphp_1604/S5oJ8tr.png [список настроенных источников аутентификации]

Нажмите * example-sql *, так как это поставщик, который вы настроили на предыдущем шаге. Появится запрос на ввод имени пользователя и пароля. Введите любую из трех тестовых комбинаций пользователя и пароля, которые вы вставили в таблицу пользователей MySQL. Попробуйте + user1 + с паролем + user1pass +.

При успешной попытке вам будет представлена ​​страница * Пример демонстрации * SAML 2.0 SP:

изображение: https: //assets.digitalocean.com/articles/simplesamplphp_1604/fjs7Kv1.png [Успешная демонстрационная страница]

Если вы не можете войти в систему и знаете, что пароль верный, убедитесь, что вы использовали один и тот же ключ с функцией + AES_ENCRYPT () + при создании пользователя и с функцией + AES_DECRYPT () + ` когда вы искали пользователя.

Теперь вы можете интегрировать SimpleSAMLphp с вашими собственными приложениями, следуя SimpleSAMLphp документации API.

Заключение

Теперь у вас есть приложение SimpleSAMLphp, надлежащим образом установленное и настроенное на вашем Ubuntu 16.04 VPS. Вы можете изучить дополнительные возможности добавления других провайдеров идентификации и услуг. SimpleSAMLphp также позволяет проводить обширную настройку пользовательского интерфейса с помощью тематики. Вы можете обратиться к их theming[theming документам для получения дополнительной информации об этом.

Related