Настройка будет состоять из следующих шагов:
Подготовка к настройке.
Инструкция предназначена для настройки доступа к сервису Keycloak по https. Предполагается, что сервис Keycloak уже настроен в рамках данной инструкции и установлен на одном сервере с контроллером SoftWLC. Так же предполагается, что уже подготовлены и получены необходимые для работы https сертификаты, обычно это набор из файлов: cert.pem, chain.pem, fullchain.pem, privkey.pem, и доменное имя для работы с сервисом. В данной инструкции используется конфигурация сервиса не исключающая возможность работы через http, а только добавляющая возможность взаимодействия через https.
Размещение сертификатов на сервере и изменение сценария docker-compose для запуска сервиса Keycloak
Ранее, для организации работы сервиса 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
На данном шаге необходимо добавить сертификаты в конфигурацию 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, для этого выполните следующие действия:
- Установите Java версии 11 командой:
sudo apt install openjdk-11-jdk
- Пропишите для сервиса tomcat работающего в составе SoftWLC новую версию Java командой:
sudo apt install openjdk-11-jdk
- Перезапустите сервис tomcat работающий в составе SoftWLC командой:
sudo systemctl restart tomcat8.service