Настройка будет состоять из следующих шагов:
Инструкция предназначена для настройки доступа к сервису Keycloak по https. Предполагается, что сервис Keycloak уже настроен в рамках данной инструкции и установлен на одном сервере с контроллером SoftWLC. Так же предполагается, что уже подготовлены и получены необходимые для работы https сертификаты, обычно это набор из файлов: cert.pem, chain.pem, fullchain.pem, privkey.pem, и доменное имя для работы с сервисом. В данной инструкции используется конфигурация сервиса не исключающая возможность работы через http, а только добавляющая возможность взаимодействия через https.
Ранее, для организации работы сервиса Keycloak, в рамках данной инструкции уже была произведена установка сервиса docker и создан сценарий docker-compose.yml по пути "/opt/keycloak/". Сервис "докеризирован" и это обязательные шаги. Разместите полученные сертификаты в папке "/opt/keycloak/cert/".
Измените сценарий "/opt/keycloak/docker-compose.yml" следующим образом:
version: "3.9"
services:
keycloak-postgres:
image: library/postgres:${KC_POSTGRES_IMAGE_TAG:-15}
container_name: ${POSTGRES_CONTAINER_NAME:-postgres}
restart: unless-stopped
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
healthcheck:
test: pg_isready -d postgres
interval: 10s
timeout: 5s
retries: 3
start_period: 5s
ports:
- ${KC_POSTGRES_PORT_MAPPING:-5435}:5432
volumes:
- postgres:/var/lib/postgresql/data
deploy:
resources:
limits:
memory: 256M
keycloak:
image: quay.io/keycloak/keycloak:20.0.5
container_name: keycloak
restart: unless-stopped
command:
- start --auto-build --db postgres --hostname-strict-https true
--https-certificate-file=/cert/cert.pem --https-certificate-key-file=/cert/privkey.pem
--hostname-strict false --http-enabled true --import-realm
--spi-login-protocol-openid-connect-suppress-logout-confirmation-screen=true
--spi-login-protocol-openid-connect-legacy-logout-redirect-uri=true
--spi-user-profile-legacy-user-profile-read-only-attributes *_RES_ACCESS_MODE
environment:
KC_DB_URL: jdbc:postgresql://keycloak-postgres:5432/postgres
KC_DB_USERNAME: postgres
KC_DB_PASSWORD: postgres
KC_DB_SCHEMA: public
KC_FEATURES: preview
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
ports:
- 8282:8080
- 8283:8443
volumes:
- ./cert:/cert
depends_on:
keycloak-postgres:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://0.0.0.0:8080/realms/master"]
start_period: 10s
interval: 30s
retries: 3
timeout: 5s
volumes:
postgres: |
Запустите команду "docker compose up -d" чтобы перезапустить приложение docker-compose и контейнер, содержащий сервис Keycloak, с новыми параметрами.
Проверьте работу контейнера командой "sudo docker compose ps"
На данном шаге необходимо добавить сертификаты в конфигурацию Java на сервер SoftWLC и рабочие ПК с которых осуществляется доступ к сервису через https.
На сервере SoftWLC перейдите в каталог "/opt/keycloak/cert/", затем выполните следующую команду:
Внимание: Замените араметр alias в соответсвии с доменным имени использованном при генерации сертификата. Так же может не совпадать путь до конфигурации Java, он зависит от версии Java и способа ее установки. |
sudo keytool -importcert -file cert.pem -alias example.ru -keystore /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts -storepass changeit |
На этом шаге необходимо внести изменения в конфигурацию некоторых сервисов, взаимодействующих с Keycloak:
Внимание: Замените адрес example.ru в соответсвии с доменным имени использованном при генерации сертификата. |
1) Сервис "Личный кабинет", конфигурационный файл "/etc/eltex-wifi-cab/system.xml"
<!-- SSO Auth --> <entry key="sso.auth.server.protocol">https</entry> <entry key="sso.auth.server.address">example.ru</entry> <entry key="sso.auth.server.port">8283</entry> <!-- SSO REST --> <entry key="sso.rest.server.protocol">https</entry> <entry key="sso.rest.server.address">example.ru</entry> <entry key="sso.rest.server.port">8283</entry> |
После внесения изменений перезапустите сервис командой "sudo service eltex-wifi-cab restart"
2) Сервис "Конструктор порталов", конфигурационный файл "/etc/eltex-portal-constructor/application.conf"
rest {
scheme = https
host = example.ru
port = 8283
sso_api_path = /realms/softwlc/protocol/openid-connect
}
auth {
scheme = https
host = example.ru
port = 8283
authentication_path = /realms/softwlc/protocol/openid-connect/auth
logout_path = /realms/softwlc/protocol/openid-connect/logout
} |
После внесения изменений перезапустите сервис командой "sudo service eltex-portal-constructor restart"
3) Сервис "EMS", конфигурационный файл "/usr/lib/eltex-ems/conf/system-config.txt"
sso.keycloak.auth-server-url=https://example.ru:8283 |
После внесения изменений перезапустите сервис командой "sudo service eltex-ems restart"
Если при попытке входа вы снова попадаете на страницу авторизации, проверьте лог модуля eltex-radius-nbi , например командой "sudo tail -fn 100 /var/log/eltex-axis/radius-nbi/nbi_error.log" (выдает 100 строк лога eltex-radius-nbi и продолжает обновлять вывод в реальном времени). Если вы видете следующую ошибку:
2023-04-12T18:02:56,008 [http-nio-8081-exec-4] ERROR Kernel Northbound.handle(line:246). Failed. commander GetAuthRoleCmd; request [AUTH_ROLE: admin] org.eltex.radius.nbi.exception.EltexException: HTTP request is failed, reason: 'Could not generate ECDH keypair' |
Необходимо обновить версию Java и сгенерировать ключи для модуля eltex-radius-nbi, для этого выполните следующие действия:
sudo apt install openjdk-11-jdk |
sudo apt install openjdk-11-jdk |
sudo systemctl restart tomcat8.service |