вторник, 24 июля 2012 г.

CentOS 6.2: Установка OpenAM под управлением Jetty с использованием OpenDJ

Пока я игрался с тестовым сервером, устанавливал разного рода программы такие как Redmine, Jira и прочие, прошло достаточно много времени. Изначально на него была поставлена система SSO (Single Sign On) на основе OpenAM от компании ForgeRock для проверки взаимодействия с другими программами. Но пришла пора создать "боевой" сервер с этой системой. И тут я понял, что абсолютно не помню, каким образом я все устанавливал, в какой последовательности и вообще какие настройки производил. Решил, если что-то забылось один раз, то высока вероятность того, что это забудется и в последующем. А это крайне не желательно, учитывая популярность данной технологии. Для тех, кто ещё не знает, что такое технология Single Sign On, можно объяснить следующим образом. К примеру, есть несколько сервисов, находящихся в рамках единой компании. Для входа на каждую из них, пользователю требуется ввести логин и пароль. Имея технологию SSO, пользователю будет достаточно авторизоваться на одном из сервисов, чтобы получить доступ ко всем остальным. Более подробную информацию вы можете найти на страницах википедии. В этой статье речь пойдет только об установке сервера SSO на основе OpenAM под управлением web-сервера Jetty с использованием LDAP сервера OpenDJ от той же компании ForgeRock. Вся эта установка будет производиться под CentOS 6.2.

Preparing

Установленная по умолчанию CentOS не содержит никаких сервисов. Нет даже простейшего telnet, что говорить о чем то большем. Поэтому, изначально установим FTP сервер. По ходу установки, он нам не пригодится, но в дальнейшим он может понадобиться. Для начала отрубаем фаервол и SELINUX, но с маленькой оговоркой. В одном из комментариев предыдущих статей мне сделали замечание, что firewall отрубать не нужно. Это очень ценное замечание, архинужное и архиважное, ибо я так же считаю, что отрубать его не то что не нужно, а опасно. Тем не менее, если вам безопасность вашего сервера не важна (как мне в данном случае), firewall можете смело отключать. Однако же, если безопасность превыше всего, то вам потребуется настроить его, чтобы пользователи извне могли достучаться до нужного сервиса. Здесь я эти детали опускаю.
[root@sso ebabenko]# lsb_release -a
LSB Version:    :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description:    CentOS release 6.2 (Final)
Release:        6.2
Codename:       Final
[root@sso ebabenko]# vi /etc/selinux/config
Параметр
SELINUX=enforcing
меняем на
SELINUX=disabled
Останавливаем и отключаем firewall.
[root@sso ebabenko]# /etc/rc.d/init.d/iptables stop
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: nat filter      [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@sso ebabenko]# /sbin/chkconfig iptables off
В дополнение к этому рекомендую отключить NetworkManager. Не знаю, с чем связана данная тулза, однако после каждой перезагрузки она убивает данные в resolv.conf, что не позволяет работать с DNS серверами. Чтобы этого не происходило, делаем следующее:
[root@sso ebabenko]# ps ax | grep -i network
 1971 ?        S      0:00 /usr/sbin/dnsmasq --strict-order --bind-interfaces --pid-file=/var/run/libvirt/network/default.pid --conf-file= --except-interface lo --listen-address 192.168.122.1 --dhcp-range 192.168.122.2,192.168.122.254 --dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases --dhcp-lease-max=253 --dhcp-no-override
 3076 ?        Ss     0:00 NetworkManager --pid-file=/var/run/NetworkManager/NetworkManager.pid
 3125 pts/0    S+     0:00 grep -i network
[root@sso ebabenko]# service NetworkManager stop
Stopping NetworkManager daemon:                            [  OK  ]
[root@sso ebabenko]# /sbin/chkconfig NetworkManager off
[root@sso ebabenko]# /sbin/chkconfig --list NetworkManager
NetworkManager  0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@sso ebabenko]# vi /etc/resolv.conf
В конец файла дописываем IP адрес вашего DNS сервера (в моем случае его IP 172.17.0.222)
nameserver 172.17.0.222
Для надежности, после этих изменений, лучше рестартануть сервер и убедиться что всё отключено и работает.
[root@sso ebabenko]# ps ax | grep -i network
 1995 ?        S      0:00 /usr/sbin/dnsmasq --strict-order --bind-interfaces --pid-file=/var/run/libvirt/network/default.pid --conf-file= --except-interface lo --listen-address 192.168.122.1 --dhcp-range 192.168.122.2,192.168.122.254 --dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases --dhcp-lease-max=253 --dhcp-no-override
 2420 pts/0    S+     0:00 grep -i network
[root@sso ebabenko]# telnet google.com 80
Trying 173.194.35.233...
Connected to google.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

vsftpd

На самом деле FTP-серверов огромное количество и установить вы можете любой вам понравившийся. Я выбрал vsftpd за счет своей простоты.
[root@sso ebabenko]# yum install vsftpd

[...skipped...]

Total download size: 151 k
Installed size: 331 k
Is this ok [y/N]: y

[...skipped...]

Installed:
  vsftpd.x86_64 0:2.2.2-11.el6

Complete!
[root@sso ebabenko]# vi /etc/vsftpd/vsftpd.conf
Чуть подправим конфигурацию сервера. Требуется отключить подключение анонимных пользователей, а так же нужно пользователей "запереть" в своей home директории
[...skipped...]

anonymous_enable=NO

[...skipped...]

chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list

[...skipped...]
Сохраняем конфигурационный файл, запускаем сервис и ставим его на автозапуск при старте сервера.
[root@sso ebabenko]# service vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]
[root@sso ebabenko]# ps ax | grep ftp
 2627 ?        Ss     0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
 3709 pts/0    S+     0:00 grep ftp
[root@sso ebabenko]# /sbin/chkconfig vsftpd on
[root@sso ebabenko]# /sbin/chkconfig --list vsftpd
vsftpd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
Теперь подключаемся с удалённой машины и проверяем, что всё работает.

Загрузка OpenDJ и конфигурирование Java

Приступим собственно к установке OpenAM сервера. По умолчанию, этот сервер самодостаточен и дополнительных примочек ему не требуется. Тем не менее, лучшим способом является установка его в кипе с OpenDJ, который является LDAP сервером. Поэтому установку начнём именно с OpenDJ. На момент установки была доступна версия http://download.forgerock.org/downloads/opendj/2.4.5/OpenDJ-2.4.5.zip
[root@sso ebabenko]# cd distrib
[root@sso distrib]# wget http://download.forgerock.org/downloads/opendj/2.4.5/OpenDJ-2.4.5.zip

[...skipped...]

2012-07-19 14:01:25 (17.9 KB/s) - "OpenDJ-2.4.5.zip" saved [18092296/18092296]

[root@sso distrib]# unzip OpenDJ-2.4.5.zip

[...skipped...]

[root@sso distrib]# mkdir -p /opt
[root@sso distrib]# mv OpenDJ-2.4.5 /opt/opendj
Перед началом установки настроим переменные окружения JAVA. Для работы с продуктами ForgeRock требуется JDK версии 1.6. Однако, так же будет достаточно OpenJDK версии 1.6, которая уже предустановлена в CentOS. Поэтому доустанавливать ничего не придётся, достаточно будет создать JAVA_HOME
[root@sso distrib]# java -version
java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.4) (rhel-1.41.1.10.4.el6-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
[root@sso distrib]# echo $JAVA_HOME

[root@sso distrib]# exit
[ebabenko@sso ~]$ echo $JAVA_HOME

[ebabenko@sso ~]$ sudo -s
[sudo] password for ebabenko:
[root@sso ebabenko]# ll /etc/profile.d/j*
ls: cannot access /etc/profile.d/j*: No such file or directory
[root@sso ebabenko]# alternatives --display java
java - status is auto.
 link currently points to /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java

[...skipped...]

[root@sso ebabenko]# echo 'export JAVA_HOME="/usr/lib/jvm/jre-1.6.0-openjdk.x86_64"' >> /etc/profile.d/java.sh
[root@sso ebabenko]# echo 'export JAVA_BIN="$JAVA_HOME/bin"' >> /etc/profile.d/java.sh
[root@sso ebabenko]# echo 'export PATH="$JAVA_HOME:$JAVA_BIN:$PATH"' >> /etc/profile.d/java.sh
[root@sso ebabenko]# less /etc/profile.d/java.sh
export JAVA_HOME="/usr/lib/jvm/jre-1.6.0-openjdk.x86_64"
export JAVA_BIN="$JAVA_HOME/bin"
export PATH="$JAVA_HOME:$JAVA_BIN:$PATH"
В профиле пользователя (в моем случае ebabenko) переменная $JAVA_HOME появится при следующем логине в систему. Если вам необходимо, чтобы она появилась сразу, перелогиньтесь на сервере. Я же всю установку буду производить из под root'а, поэтому мне будет достаточно перезайти в sudo:
[root@sso ebabenko]# echo $JAVA_HOME

[root@sso ebabenko]# exit
[ebabenko@sso ~]$ sudo -s
[sudo] password for ebabenko:
[root@sso ebabenko]# echo $JAVA_HOME
/usr/lib/jvm/jre-1.6.0-openjdk.x86_64

OpenDJ

Установка OpenDJ будет производиться со следующими параметрами:
  • не будет использоваться ни SSL, ни Start TLS
  • порты сервиса останутся по умолчанию
  • DN директория: dc=esphere,dc=ru (согласно моему домену)
[root@sso ebabenko]# cd /opt/opendj
[root@sso opendj]# ./setup --cli

OpenDJ 2.4.5
Please wait while the setup program initializes...

What would you like to use as the initial root user DN for the Directory
Server? [cn=Directory Manager]:
Please provide the password to use for the initial root user:
Please re-enter the password for confirmation:

On which port would you like the Directory Server to accept connections from
LDAP clients? [389]: 389

On which port would you like the Administration Connector to accept
connections? [4444]: 4444
Do you want to create base DNs in the server? (yes / no) [yes]: yes

Provide the base DN for the directory data: [dc=example,dc=com]: dc=esphere,dc=ru
Options for populating the database:

    1)  Only create the base entry
    2)  Leave the database empty
    3)  Import data from an LDIF file
    4)  Load automatically-generated sample data

Enter choice [1]: 1

Do you want to enable SSL? (yes / no) [no]: no

Do you want to enable Start TLS? (yes / no) [no]: no

Do you want to start the server when the configuration is completed? (yes /
no) [yes]: yes


Setup Summary
=============
LDAP Listener Port:            389
Administration Connector Port: 4444
LDAP Secure Access:            disabled
Root User DN:                  cn=Directory Manager
Directory Data:                Create New Base DN dc=esphere,dc=ru.
Base DN Data: Only Create Base Entry (dc=esphere,dc=ru)

Start Server when the configuration is completed


What would you like to do?

    1)  Set up the server with the parameters above
    2)  Provide the setup parameters again
    3)  Print equivalent non-interactive command-line
    4)  Cancel and exit

Enter choice [1]: 1

PuTTY X11 proxy: wrong authentication protocol attemptedSee /tmp/opends-setup-4478409925915052768.log for a detailed log of this operation.

Configuring Directory Server ..... Done.
Creating Base Entry dc=esphere,dc=ru ..... Done.
Starting Directory Server ....... Done.

To see basic server configuration status and configuration you can launch /opt/opendj/bin/status
Проверим работу OpenDJ
[root@sso opendj]# bin/status


>>>> Specify OpenDS LDAP connection parameters

Administrator user bind DN [cn=Directory Manager]:

Password for user 'cn=Directory Manager':

          --- Server Status ---
Server Run Status:        Started
Open Connections:         1

          --- Server Details ---
Host Name:                sso
Administrative Users:     cn=Directory Manager
Installation Path:        /opt/opendj
Version:                  OpenDJ 2.4.5
Java Version:             1.6.0_22
Administration Connector: Port 4444 (LDAPS)

          --- Connection Handlers ---
Address:Port : Protocol : State
-------------:----------:---------
--           : LDIF     : Disabled
0.0.0.0:161  : SNMP     : Disabled
0.0.0.0:389  : LDAP     : Enabled
0.0.0.0:636  : LDAPS    : Disabled
0.0.0.0:1689 : JMX      : Disabled

          --- Data Sources ---
Base DN:     dc=esphere,dc=ru
Backend ID:  userRoot
Entries:     1
Replication: Disabled
Для тех, кто управляет сервером из Windows через ssh (например, PyTTY), с помощью программы Xming можно управлять OpenDJ через "оконный" интерфейс. После установки Xming, запустите ланчер программы XLaunch.




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


Далее перезапускаем PuTTY (то есть перезаходим на сервер) и изменяем переменную DISPLAY, где указываем свой IP адрес и дисплей. IP адрес лучше узнавать из лога XLaunch, потому что форвардиться должно именно на него. Так например, у меня в компании 3 сети: одна идет через витую пару, две - WiFi. Все они находястя в разных подсетях. В зависимости от неработоспособности одной сети, происходит автоматическое переподключение к другой. И порой просто не реально узнать, где ты находишься и какой IP тебе сейчас присвоен. Для этого в трее XLaunch вызовите контектсное меню, в нём выберите пункт "View log", первые строки которого будут примерно следующего содержания:
Welcome to the Xming X Server
Vendor: Colin Harrison
Release: 6.9.0.31
FreeType2: 2.3.4
Contact: http://sourceforge.net/forum/?group_id=156984

Xming :0 -multiwindow -clipboard -ac 

XdmcpRegisterConnection: newAddress 10.200.1.47

[...skipped...]
Номер дисплея тот, который указан в поле "Display number" XLaunch (первый скрин XLaunch). Получив эти данные, прописываем на сервере в переменную DISPLAY:
[root@sso opendj]# echo $DISPLAY
localhost:10.0
[root@sso opendj]# export DISPLAY=10.200.1.47:0
[root@sso opendj]# echo $DISPLAY
10.200.1.47:0
[root@sso opendj]# bin/control-panel &


Помимо просмотра статуса сервера, эта панель позволяет полностью администрировать ваш OpenDJ сервер. Для завершения работы с панелью управления, нужно выбрать пункт меню "File -> Exit".
Установим, чтобы OpenDJ автоматически стартовал при каждой загрузке сервера:
[root@sso opendj]# cd bin
[root@sso bin]# ./create-rc-script -f opendj.init
[root@sso bin]# mv opendj.init /etc/init.d/opendj
[root@sso bin]# /sbin/chkconfig --add opendj
[root@sso bin]# /sbin/chkconfig --list opendj
opendj          0:off   1:off   2:off   3:on    4:on    5:on    6:off

Jetty

Для работы OpenAM потребуется веб сервер. Компания ForgeRock предоставила множество конфигурации для разных серверов. Для пользователя осталось только выбрать, какой сервер ему целесообразнее использовать. Опять таки же, идя по пути наименьшего сопротивления, я выбрал Jetty. В документации по установке OpenAM указана установка под Jetty версии 7. Но думаю, что он так же без проблем установится и на 8-ую версию сервера. Однако, я экспериментровать не стал и установил "семерку". На момент установки была доступна версия http://download.eclipse.org/jetty/7.6.5.v20120716/dist/jetty-distribution-7.6.5.v20120716.tar.gz
[root@sso bin]# cd ~ebabenko/distrib
[root@sso distrib]# wget http://download.eclipse.org/jetty/7.6.5.v20120716/dist/jetty-distribution-7.6.5.v20120716.tar.gz

[...skipped...]

[root@sso distrib]# tar zxvf jetty-distribution-7.6.5.v20120716.tar.gz

[...skipped...]

[root@sso distrib]# mv jetty-distribution-7.6.5.v20120716 /opt/jetty
[root@sso distrib]# adduser -r -m jetty
[root@sso distrib]# chown -R jetty:jetty /opt/jetty
[root@sso distrib]# cd /etc/init.d
[root@sso init.d]# ln -s /opt/jetty/bin/jetty.sh jetty
[root@sso init.d]# /sbin/chkconfig --add jetty
[root@sso init.d]# /sbin/chkconfig --list jetty
jetty           0:off   1:off   2:off   3:on    4:off   5:off   6:off
[root@sso init.d]# /sbin/chkconfig --level 345 jetty on
[root@sso init.d]# /sbin/chkconfig --list jetty
jetty           0:off   1:off   2:off   3:on    4:on    5:on    6:off
По действиям выше не трудно догадаться, что сервер был установлен в директорию /opt, для него был создан пользователь:группа jetty:jetty, а так же он был установлен в автозапуск с уровнями 3, 4 и 5. Подкорректируем немного конфигурацию, согласно документации [3]:
[root@sso init.d]# vi /etc/default/jetty
JAVA_HOME="/usr/lib/jvm/jre-1.6.0-openjdk.x86_64"
JAVA=$JAVA_HOME/bin/java
JAVA_OPTIONS=" -server -Xms256m -Xmx1024m -XX:MaxPermSize=256m -XX:+DisableExplicitGC "
JETTY_HOME=/opt/jetty
JETTY_USER=jetty
JETTY_PORT=8080
JETTY_HOST=127.0.0.1
JETTY_LOGS=/opt/jetty/logs/
Запускаем и проверяем работу сервера
[root@sso init.d]# ps ax | grep jetty
16285 pts/0    S+     0:00 grep jetty
[root@sso init.d]# service jetty start
Starting Jetty: STARTED Jetty Fri Jul 20 14:17:24 MSK 2012
[root@sso init.d]# telnet localhost 8080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

OpenAM

Подошло время финальной части - установке OpenAM сервера. Есть 2 части OpenAM: сервер и агент. Сервер - это собственно то, что управляет авторизацией пользователей. Агент - это то, что устанавливается на стороне клиента. Клиентом в данном случае является некий внутренний сервис компании, которому требуется подключиться к авторизации сервера OpenAM. В серверной части есть несколько видов архивов (исходники, инструменты управления и прочее), однако для установки нам потребуется deploy-версия сервера (war-файл). На момент установки была доступна http://download.forgerock.org/downloads/openam/openam10/10.0.0/openam_10.0.0.war
[root@sso init.d]# service jetty stop
Stopping Jetty: OK
[root@sso init.d]# cd ~ebabenko/distrib
[root@sso distrib]# mkdir -p openam
[root@sso distrib]# cd openam
[root@sso openam]# wget http://download.forgerock.org/downloads/openam/openam10/10.0.0/openam_10.0.0.war

[...skipped...]

[root@sso openam]# cp openam_10.0.0.war /opt/jetty/webapps/openam.war
[root@sso openam]# chown jetty:jetty /opt/jetty/webapps/openam.war
[root@sso openam]# vi /etc/hosts
В хостах требуется указать собственное имя сервера, адресованное на 127.0.0.1. Внешние DNS сервера и без этого будут знать, как найти сервер, а эта запись ускорит обращение сервера к самому себе.
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 sso sso.esphere.ru
После внесения изменений перегружаем сервер. Понятное дело, что это делать вовсе не обязательно. Но для себя я уже выработал привычку: по окончании каких-либо сложных установок, связанных с автозапуском, выполнить перезапуск и удостовериться, что всё заработает автоматически.
[root@sso openam]# reboot
После перезапуска сервера, открываем Web-интерфейс OpenAM и делаем начальную настройку. В моем случае адрес будет http://sso.esphere.ru:8080/openam

Для создания новой конфигурации, выбираем пункт "Create New Configuration"

Создаем пароль для администратора SSO. Тут важно запомнить, что логин администратора OpenAM - регистрозависимый "amAdmin".

Настраиваем данные сервера. Здесь требуется указать:
  • Server URL - URL SSO сервера, по которому пользователь сможет обращаться к серверу (ну думаю, что тут всё понятно).
  • Cookie Domain - достаточно важный параметр. При авторизации пользователя, сервер будет хранить данные в "cookie", которые будут доступны внутренним сервисам определенной доменной зоны. Внутренними сервисами будут те сервисы, которые будут находиться в зоне, указанной в этом параметре.
  • Platform Locale - язык интерфейса. Есть и другие языки, но русского нет. Поэтому лучше оставить без изменений.
  • Configuration Directory - директория, где будут храниться конфигурационные данные сервера OpanAM (параметр говорит сам за себя).
Так как это единственная инсталляция сервера (то есть единственный сервер OpenAM), выбираем пункт "First Instance". В случае, если у вас уже есть установленный OpenAM сервер и вы добавляете новый к существующему, требуется выбрать пункт "Add to Existing Deployment?". В настройках ниже требуется указать данные LDAP сервера, в котором будут сохраняться данные пользователей SSO сервера. Можно использовать внутренний интерфейс OpenAM и выбрать соответствующий пункт. Однако, для этого был специально установлен OpenDJ. Выбираем соответствующий пункт и вводим данные OpenDJ сервера. Не вижу необходимости описывать каждое поле формы, за исключением двух.
  • Encryption Key - это сгенерированный ключ, через который OpenAM и OpenDJ будут между собой "общаться". Чтобы не возникло лишних проблем, его лучше не менять.
  • Root Suffix - это корневая директория LDAP сервера, где будут храниться данные пользователей SSO. При установке OpenDJ, я указал ему директорию "dc=esphere,dc=ru". Чтобы данные не были в одной не разбираемой куче, для SSO лучше выделить отдельную директорию. В моём случае это "dc=opensso,dc=esphere,dc=ru"
После ввода пароля, если вы все заполнили правильно, на форме появится ошибка на против поля "Host Name" о том, что на LDAP сервере нет директории, указаной в поле "Root Suffix". Давайте ее создадим. Переходим в консоль сервера.
[root@sso ebabenko]# cd /opt/opendj/bin
[root@sso bin]# echo $DISPLAY
localhost:10.0
[root@sso bin]# export DISPLAY=10.200.1.47:0
[root@sso bin]# echo $DISPLAY
10.200.1.47:0
[root@sso bin]# ./control-panel &
[1] 3702
Откроется панель управления OpenDJ. Слева в меню выбираем пункт "Manage Entries".

Слева на корневой директории (в моем случае это "dc=esphere,dc=ru") нажимаем правой кнопкой мыши и выбираем пункт "New Domain..."

Вводим имя новой директории (поле Name) и описание (поле Description) если требуется. После чего нажимаем OK и закрываем все окна. Директория создана.
После создания директории, у меня возник вопрос: а как быть тем, у кого нет "окошек" или не хочется их ставить, потому что считает, что окна - это удел делитантов? Как то же это все должно управляться с консоли. Может я плохо искал, или искал, но не там, - ответа на свой вопрос я так и не нашел. На самом деле, я считаю, что достаточно глупо, управляя из под консоли сервером, не иметь возможности полной поддержки того, что на него устанавливается. Тем не менее, если у кого есть способ, каким образом это можно сделать, буду рад получить от вас эту информацию.
После создания директории, возращаемся обратно в web-интерфейс OpenAM.

Достаточно удалить и ввести пароль, чтобы система переподключилась и проверила все настройки. Если все сделано правильно, на форме не будет никаких ошибок и активируется кнопка "Next". Нажимаем на нее и переходим к следующему окну мастера настроек.

Смысла этого окна (User Store Details) я так и не понял, так как на мой взгляд оно является дублем предыдущего. Собственно, в нем отмечаем радиокнопку на OpenDJ, поля заполняем так же, как и в предыдущем окне.

На этой странице мастера нужно указать местоположение системы, управляющей несколькими серверами OpenAM. Если у вас несколько серверов, на которых развернуты сервисы OpenAM, они должны быть задействованы через систему сбалансированной нагрузки. Подробней об этом можно почитать в документации [4]. Но так как у меня всего лишь один сервер SSO, я поставил радиокнопку в положение "No" и перешел к следующему этапу конфигурации.

Здесь требуется указать пароль для OpenAM-агентов, которые будут подключаться к серверу. В прошлый раз, когда я экспериментировал на тестовом сервере, я не придал этому аккаунту особого значения, ввел в качестве пароля какую-то неразбериху и забыл. Когда же мне понадобилось подключить агента, я долго не мог понять, какой пароль от меня требует система, где он находится и как его поменять. Советую вам так же не допустить подобную мной ошибку.
Сами по себе агенты инсталируются на http-сервер и прослушивают к нему идущие соединения. Когда какой-либо пользователь пытается зайти на определенный узел http-сервера, агент перехватывает его соединение до того момента, как его должен был получить узел обработки запроса и перенаправляет этого пользователя на авторизацию OpenAM серверу, если пользователь не авторизован. Если пользователь уже авторизован, то агент отправляет пользователя к нужному узлу.
Вся эта операция проходит прозрачно для пользователя, что он даже не замечает, что его запрос только что редиректнули несколько раз по разным узлам (за исключением того случая, когда пользователь в конечном счете оказался на странице ввода логина и пароля). Однако, для такого "прозрачного" прохода, агенту требуется установить прямое соединение с сервером, в параметрах которого указывается пароль, который устанавливается как раз на этом этапе инсталяции сервера. После установки пароля, переходим к следующему этапу установки.

Собственно, на этом все мучения практически закончились. Здесь выводится информация, которую вы только что ввели на страницах мастера конфигурации сервера. Если требуется поправить какие то данные, на против каждого из блоков формы, есть ссылка "edit...", нажав на которую мастер переместится на первую страницу редактирования данных блока. Если все данные верны, требуется нажать на кнопку "Create Configuration".

При успешной установке, через несколько секунд вы увидите сообщение об успешном окончании установки с предложением перехода на страницу авторизации. Нажимаем на "Proceed to Login".

... вводим логин и пароль администратора системы ...

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

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

Источники, использованные при написании статьи:
[1] http://opendj.forgerock.org/doc/install-guide/index.html
[2] http://www.copper-arrow.com/blog/jetty-web-server-centos-6
[3] http://openam.forgerock.org/doc/install-guide/index.html#prepare-jetty-7
[4] https://wikis.forgerock.org/confluence/display/openam/5+Extending+to+a+Dual+Instance+Deployment