В документе описан порядок действий для настройки SSO как с использованием сервиса Keycloak, так и без него. По завершении интеграции пользователи получат возможность проходить SSO-аутентификацию внутри Почты VK WorkSpace.
SSO (Single Sign-On) — технология, позволяющая проходить при авторизации процесс аутентификации один раз и автоматически получать доступ к нескольким системам без повторного ввода учетных данных.
Чтобы начать настройку, вам потребуется:
- Доступ на сервер Почты и в панель администратора VK WorkSpace.
- Доступ к Active Directory.
- Пользователь Active Directory с правами администратора.
- Доступ в Keycloak (для интеграций с внешним сервером).
- Навыки системного администрирования (Linux, Windows).
На контролере домена необходимо зарегистрировать учетную запись.
В разделе Account ввести в поле User logon name следующее:
- Для интеграции с Keycloak —
HTTP/<почтовый домен>. - Для интеграции без Keycloak —
HTTP/auth.<почтовый домен>.
В окне Account options внутри того же раздела отметьте чекбосы:
- User cannot change password
- Password never expires
- This account supports Kerberos AES 128 bit encryption
- This account supports Kerberos AES 256 bit encryption
- Do not require Kerberos preauthentication
Затем в разделе управления групповыми политиками перейдите к настройке политики Configure encryption types allowed for Kerberos. Настройка актуальна как для работы с Keycloak, так и без него.
Во вкладке Security Policy Setting отметьте следующие политики:
- RC4_HMAC_MD5,
- AES128_HMAC_SHA1,
- AES256_HMAC_SHA1.
Выполните следующие команды на сервере Active Directory для получения SPN и REALM:
Get-ADComputer -Identity <dc-name> -Properties servicePrincipalName | Select-Object servicePrincipalNameGet-ADDomain | Select-Object Name, DNSRoot, Forest
Сохраните полученные значения:
- DNSRoot — будет использоваться как Kerberos Realm.
- servicePrincipalName — пример формата SPN.
Команды ниже выполняйте на сервере Active Directory.
Пример команды, чтобы создать keytab для WEB:
ktpass -princ HTTP/infra-01.dev.onprem.ru@AD2013.ON-PREMISE.RU -mapuser AD2013\kcuser3 -out C:\tmp\keycloak.keytab -mapOp set -crypto AES256-SHA1 -setupn -setpass -ptype KRB5_NT_PRINCIPAL /pass strongSecret
Сохраните созданный keytab-файл для HTTP на почтовом сервере.
Чтобы сгенерировать keytab-файлы для SMTP и IMAP, используйте следующие команды:
dsquery * -filter sAMAccountName=kcuser3 -attr msDS-KeyVersionNumber# В следующих командах /kvno <N> – результат выполнения первой командыktpass -princ smtp/infra-01.dev.onprem.ru@AD2013.ON-PREMISE.RU -mapuser AD2013\kcuser3 -out C:\tmp\infra_smtp.keytab -mapOp add -crypto AES256-SHA1 -setupn -setpass -ptype KRB5_NT_PRINCIPAL /kvno <N> /pass strongSecretktpass -princ imap/infra-01.dev.onprem.ru@AD2013.ON-PREMISE.RU -mapuser AD2013\kcuser3 -out C:\tmp\infra_imap.keytab -mapOp add -crypto AES256-SHA1 -setupn -setpass -ptype KRB5_NT_PRINCIPAL /kvno <N> /pass strongSecret
Фйалы .keytab для IMAP и SMTP нужно сохранить на сервере Почты. В дальнейшем их нужно будет добавить в установщик.
Пример команд, чтобы создать keytab для WEB:
ktpass -princ HTTP/infra-01.dev.onprem.ru@AD2013.ON-PREMISE.RU -mapuser "<username>@ad2013.on-premise.ru" -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass "<userpass>" +dumpsalt -out C:\Users\Admin\Documents\keytabs_sso\http.keytabktpass -princ "HTTP/infra-01.dev.onprem.ru@AD2013.ON-PREMISE.RU" -mapuser "<username>@ad2013.on-premise.ru" -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass "<userpass>" -in C:\Users\Admin\Documents\keytabs_sso\http.keytab -out C:\Users\Admin\Documents\keytabs_sso\httpq.keytab -setupn -setpass -rawsalt "<Hashing password with salt из вывода прошлой команды>"
Чтобы сгенерировать keytab-файлы для SMTP, IMAP и WebDAV, используйте следующие команды:
dsquery * -filter sAMAccountName=kcuser3 -attr msDS-KeyVersionNumber# В следующих командах /kvno <N> – результат выполнения первой командыktpass -princ smtp/infra-01.dev.onprem.ru@AD2013.ON-PREMISE.RU -mapuser AD2013\kcuser3 -out C:\tmp\infra_smtp.keytab -mapOp add -crypto AES256-SHA1 -setupn -setpass -ptype KRB5_NT_PRINCIPAL /kvno <N> /pass strongSecretktpass -princ webdav/infra-01.dev.onprem.ru@AD2013.ON-PREMISE.RU -mapuser AD2013\webdav_user -out C:\tmp\infra_webdav.keytab -mapOp add -crypto AES256-SHA1 -setupn -setpass -ptype KRB5_NT_PRINCIPAL /kvno <N> /pass strongSecretktpass -princ imap/infra-01.dev.onprem.ru@AD2013.ON-PREMISE.RU -mapuser AD2013\kcuser3 -out C:\tmp\infra_imap.keytab -mapOp add -crypto AES256-SHA1 -setupn -setpass -ptype KRB5_NT_PRINCIPAL /kvno <N> /pass strongSecret
Файлы .keytab для IMAP, SMTP и WebDAV нужно сохранить на сервере Почты. В дальнейшем их нужно будет добавить в установщик.
-
princ— имя SPN в Keycloak для идентификации в среде Kerberos.Имя состоит из: - Транспортного протокола. Для HTTP в верхнем регистре.
- Имени хоста сервера Keycloak или адреса почтового сервера для интеграций внутри инсталляции. - Kerberos Realm. Для HTTP в верхнем регистре. -
mapuser– имя созданной в домене учетной записи для сервера Keycloak (DOMAIN\username). -
mapOp– если задано значение add, то новый SPN будет добавлен к существующим. Если задано значение set, то SPN будет перезаписан. -
out– задает путь к генерируемому keytab-файлу. Например, C:\temp\spnego_spn.keytab. -
/pass– значение пароля от учетной записи для сервера Keycloak в домене. -
Параметры
cryptoиptypeзадают ограничения на используемые алгоритмы и тип генерируемой Kerberos-службы. Рекомендуется задать параметры, как в указанном примере:-crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL. -
Параметр -setupn необходим для того, чтобы UPN не менялся.
-
Авторизуйтесь в панели администратора под учетной записью администратора.
-
Выберите адрес сервера, для которого нужно настроить интеграцию с Keycloak. У выбранного домена должна быть настроена MX-запись.
-
Перейдите в раздел Конфигурация → Настройки панели администратора.
-
Чтобы начать настройку, уберите чекбокс Не использовать AD:
-
Введите в поле Адрес AD адрес вашего каталога Active Directory.
-
Каталоги пользователей — введите значение поля distinguishedName из списка атрибутов каталога. Например,
OU=demoapp.DC=presale.DC=local.Если вам нужно указать больше одного каталога пользователей, обратитесь к представителю VK.
-
Введите в поле Логин администратора логин администратора Active Directory.
-
Вставьте в поле Пароль администратора пароль администратора Active Directory.
-
Если вы используете свойство Отчество, введите его значение в Поле свойства «Отчество».
-
Использовать шифрованное соединение (LDAPS) — есть возможность добавления сертификата LDAPS с помощью кнопки Добавить сертификат.
-
Отметьте чекбокс Игнорировать ошибки сертификата, если у вас самоподписанный SSL-сертификат.
Сбрасывать сессии пользователей при изменении пароля — если чекбокс отмечен, при изменении пароля пользователя в Active Directory будет сбрасываться сессия в Почте.
Использовать в качестве логина email вместо username — в текущей версии поле не используется.
-
Нажмите на кнопку Сохранить, чтобы применить настройки.
Если пользователи не появились в Почте, нужно проверить корректность настроек синхронизации с Active Directory с помощью консольной команды:
sudo journalctl -fu onpremise-container-adloader1.service
-
Перейдите в веб-интерфейс установщика, в адресной строке браузера укажите адрес:
http://server-ip-address:8888. -
Нажмите на значок
и перейдите в раздел Продукты. -
Перейдите на вкладку Администрирование.
-
Включите опции Вход через Kerberos и Keycloak (внешний).
-
Сохраните изменения и вернитесь к списку ролей, чтобы сгенерировать дополнительные контейнеры.
-
Затем в Настройках перейдите в раздел Интеграции → Вход через Kerberos.
-
Заполните поля:
-
Адрес системы аутентификации Kerberos — адрес сервера, на котором установлен AD/Kerberos и порт 88.
-
Адрес сервера Kerberos-adm (Kerberos administration) — адрес сервера, на котором установлена административная панель Kerberos и порт 749.
-
Имя REALM в Kerberos — заглавными буквами введите имя REALM (чаще всего оно совпадает с адресом сервера AD/Kerberos).
-
Адрес сервера SPN (Service Principal Name).
-
-
Добавьте keytab-файлы в соответствующие поля и сохраните изменения.
-
Чтобы применить новую конфигурацию перейдите к списку ролей и повторите соответствующие шаги или запустите автоматическую установку.
На сервере Почты проверьте файл /etc/krb5.conf:
[libdefaults]default_realm = <YOUR_REALM>dns_lookup_realm = falsedns_lookup_kdc = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = trueallow_weak_crypto = truedefault_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 rc4-hmacdefault_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 rc4-hmacpermitted_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 rc4-hmacrdns = false[realms]<YOUR_REALM> = {kdc = <ad-server>:88admin_server = <ad-server>:749}[domain_realm].<your-domain> = <YOUR_REALM><your-domain> = <YOUR_REALM>
Замените <YOUR_REALM>, <ad-server> и <your-domain> на ваши значения.
Для корректной работы SSO на клиентских машинах необходимо настроить политики Google Chrome. Выполните следующие команды в терминале с правами администратора:
reg add "HKLM\SOFTWARE\Policies\Google\Chrome" /v AuthSchemes /t REG_SZ /d "negotiate,ntlm,basic,digest" /freg add "HKLM\SOFTWARE\Policies\Google\Chrome" /v AuthServerAllowlist /t REG_SZ /d "*.<your-domain>,<ad-server>,<kerberos-realm>,*.<mail-domain>" /freg add "HKLM\SOFTWARE\Policies\Google\Chrome" /v AuthNegotiateDelegateAllowlist /t REG_SZ /d "*.<your-domain>,*.<mail-domain>" /f
После настройки политик проверьте их в браузере Chrome:
- Откройте
chrome://policy - Убедитесь, что политики
AuthSchemes,AuthServerAllowlist,AuthNegotiateDelegateAllowlistотображаются без ошибок
Политики должны быть подсвечены как гиперссылки, без ошибок (error).
Проверьте файл настроек домена, для которого будет настраиваться интеграция с Keycloak:
-
Перейдите по URL административной панели
https://biz.<domain_name>/admin/misc/configurations/adloaderclient/и кликните по адресу домена.
-
Убедитесь, что в разделе options отсутствует значение
proxyAddresses.
-
Если значение
proxyAddressesприсутствует, необходимо удалить его, включая скобки:(proxyAddresses=smtp:sink.mail1@exch.on-premise.ru). -
Сохраните изменения.
-
Перейдите в веб-интерфейс установщика, в адресной строке браузера укажите адрес:
http://server-ip-address:8888. -
Нажмите на значок
и перейдите в раздел Продукты. -
Перейдите на вкладку Администрирование.
-
Включите опции Вход через Kerberos и Keycloak внутри инсталляции. Если вы планируете использовать внешний сервис Keycloak, нужно включить опцию Интеграция с внешним Keycloak сервером.
-
Сохраните изменения и вернитесь к списку ролей, чтобы сгенерировать дополнительные контейнеры.
-
В настройках перейдите в раздел Интеграции → Вход через Kerberos.
-
Введите заглавными буквами адрес сервера Active Directory, который будет использоваться в интеграции, в поле Имя REALM в Keycloak.
В поле можно также ввести любое ключевое название, например KEYCLOAKREALM. Позже это значение будет использоваться при настройках в интерфейсе Keycloak. REALM в установщике не должен совпадать с Kerberos REALM, у них разное назначение.
-
Сохраните изменения.
-
Если установщик выдаст ошибку, попробуйте сохранить еще раз.
-
Прежде чем перейти в интерфейс Keycloak, на сервере с дистрибутивом Почты выполните команду:
grep KEYC /opt/mailOnPremise/dockerVolumes/keycloak1/keycloak.env
Для перехода в Keycloak в строке браузера введите адрес: https://biz.<mail_domain>/auth.
Если вы используете внешний сервер Keycloak, перейдите в его панель администрирования.

-
В выпадающем меню нажмите на кнопку Add realm.
-
В поле Name введите имя REALM, аналогичное указанному в интерфейсе установщика.
-
Нажмите на кнопку Create — откроется окно настроек, раздел General.

-
В поле Frontend URL добавьте URL вида:
http://biz.<mail_domain>:80/auth. -
Сохраните изменения.
-
Во вкладке Login у параметра Require SSL необходимо выбрать значение none.
-
Сохраните настройки.
-
Перейдите во вкладку Keys → Providers и удалите неподдерживаемые провайдеры (
aes-generatedиrsa-enc-generated).
-
В разделе Clients создайте нового клиента. Для этого в поле Client ID введите значение api и нажмите на кнопку Save.
-
Вкладку Settings нужно настроить следующим образом:
- Access Type — confidential (после изменения типа доступа появятся дополнительные настройки);
- Service Accounts Enabled — ON;
- Authorization Enabled — ON;
- Valid Redirect URIs — ***** (необходимо ввести в поле символ *);
-
Сохраните изменения.
-
Перейдите во вкладку Credentials.
-
Скопируйте или сохраните значение поля Secret.

-
Перейдите в раздел User Federation и в выпадающем меню Add provider выберите ldap.
-
Внесите данные в соотвествие с настройками LDAP в вашем каталоге Active Directory.
Обратите внимание:
- В строке Username LDAP attribute необходимо указать название поля в Active Directory, в котором содержатся юзернеймы пользователей.
- В поле Bind DN нужно добавить точное местоположение пользователя для синхронизации в каталоге AD.
-
Проверьте соединение с помощью кнопок Test connection и Bind Credential.
-
Раскройте вкладку Kerberos Integration и внесите данные для интеграции.
-
Заполните поля:
- Kerberos Realm — введите имя REALM из Kerberos.
- Server Principal — укажите ранее созданный SPN Например,
HTTP/biz.infra-01.dev.onprem.ru@AD2013.ON-PREMISE.ru. - KeyTab — добавьте в путь до keytab-файла для HTTP.
Менять положение флагов не нужно.
-
Сохраните изменения.
Выполните следующую команду на сервере Почты:
cp http.keytab /opt/mailOnPremise/dockerVolumes/keycloak1/keytabs/cp smtp.keytab /opt/mailOnPremise/dockerVolumes/keycloak1/keytabs/cp imap.keytab /opt/mailOnPremise/dockerVolumes/keycloak1/keytabs/cp webdav.keytab /opt/mailOnPremise/dockerVolumes/keycloak1/keytabs/
Или скопируйте все keytab-файлы одной командой:
cp *.keytab /opt/mailOnPremise/dockerVolumes/keycloak1/keytabs/
-
В настройках установщика Почты необходимо перейдите в раздел Интеграции → Интеграция с keycloak для SSO авторизации.

-
В поле Client Secret в Keycloak введите код из раздела Clients → Credentials в Keycloak, который вы сохранили ранее.
-
Добавьте адреса сервисов Kerberos (с портами) и keytab-файлов для IMAP и SMTP.
-
Сохраните изменения.
-
Чтобы применить изменения перейдите к списку ролей и запустите автоматическую установку.
-
Чтобы в интерфейсе пользователей начала отображаться кнопка Войти через SSO, выполните в контейнере mailapi1 шаг up_container.
-
Проверьте успешность интеграции, войдя в систему через SSO под учетной записью пользователя.
Технический писатель: Груздев Никита