Конфигурация keycloak и гуакамоле за конфигурацией обратного прокси-сервера httpd

У меня Apache httpd настроен как обратный прокси с SSL. Я пытаюсь настроить keycloak и гуакамоле, используя http за прокси. Я использую контейнеры keycloak, mysql, guacd и guacamole. У меня работает весь поток, пока keycloak не попытается перенаправить обратно на страницу гуакамоле. К вашему сведению... моя конфигурация очень похожа на следующий вопрос, но с другой ошибкой доступа, показанной ниже: Как настроить Keycloak для работы с плагином OpenID от Guacamole?

Итак, пользователь попадает на веб-сервер через: https://example.com/guacamole/. Httpd перенаправляет на http://guacamole:8080/guacamole. Guacamole перенаправляет на keycloak для аутентификации. Войдите в систему как действительный пользователь, и перенаправление на гуакамоле не удастся.

Мой гуакамоле настроен как:

openid-jwks-endpoint: https://example.com/auth/realms/Guacamole-test/protocol/openid-connect/certs
openid-issuer: https://example.com/auth/realms/Guacamole-test
openid-client-id: Guacamole
openid-redirect-uri: https://example.com/guacamole/

Моя конфигурация httpd:

   ServerName example.com

   SSLEngine On
   SSLCertificateFile      /opt/test.crt
   SSLCertificateKeyFile   /opt/test.key

  ProxyPass /guacamole/ http://guacamole:8080/guacamole/ flushpackets=on
  ProxyPassReverse /guacamole/ http://guacamole:8080/guacamole/

  ProxyPass /guacamole/websocket-tunnel ws://guacamole:8080/guacamole/websocket-tunnel
  ProxyPassReverse /guacamole/websocket-tunnel ws://guacamole:8080/guacamole/websocket-tunnel

  ProxyPass /auth/ http://keycloak:8080/auth/
  ProxyPassReverse /auth/ http://keycloak:8080/auth/

</VirtualHost>

Я получаю следующую ошибку в гуакамоле:

INFO  o.a.g.a.o.t.TokenValidationService - Rejected invalid OpenID token: Unable to process JOSE object (cause: org.jose4j.lang.UnresolvableKeyException: Unable to find a suitable verification key for JWS w/ header {"alg":"RS256","typ" : "JWT","kid" : "bSv9K9W2us7SaUamJP3bWD1HWJuo6hbne2t3Gsc6V44"} due to an unexpected exception (javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target) while obtaining or using keys from JWKS endpoint at https://example.com/auth/realms/ocprealm/protocol/openid-connect/certs): JsonWebSignature{"alg":"RS256","typ" : "JWT","kid" : "bSv9K9W2us7SaUamJP3bWD1HWJuo6hbne2t3Gsc6V44"}->eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiU3Y5SzlXMnVzN1NhVWFtSlAzYldEMUhXSnVvNmhibmUydDNHc2M2VjQ0In0.eyJleHAiOjE2MDc5MDE3NDAsImlhdCI6MTYwNzkwMDg0MCwiYXV0aF90aW1lIjoxNjA3OTAwODI1LCJqdGkiOiJhYmI1MDY5Zi01MTYzLTQ2ZjUtODA2ZC05M2ZkODU2YmQxMzciLCJpc3MiOiJodHRwczovL3Vzd2Rzcy5wcm9nZW55Lm5ldC9hdXRoL3JlYWxtcy9vY3ByZWFsbSIsImF1ZCI6Ikd1YWNhbW9sZSIsInN1YiI6IjE4MDRjOWJiLTZiOTEtNDY0YS04N2I1LWQ4MDNiY2Y3YWZmNCIsInR5cCI6IklEIiwiYXpwIjoiR3VhY2Ftb2xlIiwibm9uY2UiOiJoazc5NmlmZHUwdmdvcjJxcnZidDNqZmowcCIsInNlc3Npb25fc3RhdGUiOiJiZWNjZTZmOS01MDQ2LTQzMWEtOTQzNy1hMDczYTRhNDZhNGIiLCJhY3IiOiIwIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJuYW1lIjoiR3V5IFNoZXBoZXJkIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiZ3NoZXBoZXJkIiwiZ2l2ZW5fbmFtZSI6Ikd1eSIsImZhbWlseV9uYW1lIjoiU2hlcGhlcmQiLCJlbWFpbCI6ImdzaGVwaGVyZEBwcm9nZW55Lm5ldCJ9.Fm2Vfep4N611KwSJc6MvhH80C3wca_T2If1YSVhzZdeC2eVh-v0_OCnEshcl_huta4a2VqolraqmqMDaxalAdnHO4jes71a2ndDfwoCnp1B06EBPL8kNnQeIHNM3fYps2GuhBqWLmfDDSIvXPlcnctrPKop8PQDglHSsiJOGgWgzfrQbG1zFlw0jupJVaYGY6P8q3Lji5ryIcStNATcuf1dCvF_v1oqoacYsRNFljyg7Xf0ZQIuA53xY3czKkiVVqZt55LArjAv1cPmrekkf77NlGpFzPbyw29_yItAy1rPqxfYphYDCm55qM97agjIE7WsKKC5lHwZ6gCWoMIcrMw

Я не понимаю, почему он пытается использовать проверку SSL при окончательном перенаправлении. Я считаю, что после того, как keycloak проверит логин и попытается перенаправить обратно на https://example.com/guacamole/, конфигурация httpd должна проксировать это на http://guacamole:8080/guacamole. Я также пытался настроить keycloak с помощью tls.key и tls.crt в соответствии с документацией по keycloak, чтобы увидеть, имеет ли это какое-либо значение, но это не так. Любая помощь будет принята с благодарностью, так как я явно упускаю или не понимаю что-то в конфигурации.

Похоже, ваш tls.crt (или /opt/test.crt) неверен. Как вы его сгенерировали? (слепая догадка Let's Encrypt?). Не могли бы вы предоставить реальный URL-адрес вместо общего https://example.com/ для проверки пути сертификата, пожалуйста?

Jan Garaj 18.12.2020 16:31

Гуакамоле по умолчанию регистрирует только сообщения на уровне «информация» или выше. Вы можете настроить гуакамоле для регистрации сообщения «отладка» для поиска дополнительной информации. Для этого требуется logback.xml размещение файла в GUACAMOLE_HOME. Подробности можно найти здесь: guacamole.apache.org/doc/1.2.0/gug/…

Song Lim 22.12.2020 02:42

Вы забыли указать значение для openid-authorization-endpoint в файле конфигурации гуакамоле? кажется, что это требуется в расширении openid. Ссылка: guacamole.apache.org/doc/gug/openid-auth.html

Song Lim 22.12.2020 02:57
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
1 639
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете OIDC, поэтому, когда Guacamole получает ключ JWT, он пытается проверить подпись токена. Для этого он должен связаться с Keycloak (через https), чтобы получить открытый ключ, используемый для подписи токена. Это терпит неудачу с ошибкой рукопожатия SSL. Вероятно, JVM для гуакамоле не доверяет сертификату SSL, поэтому вам необходимо импортировать его в хранилище ключей JVM.

Я не думаю, что это связано с вашей проблемой, но при таком запуске Keycloak за прокси-сервером вам необходимо установить некоторые атрибуты. Я запускаю Keycloak в Docker, а вы делаете это с переменными среды. Эти два довольно важны для установки:

KEYCLOAK_FRONTEND_URL = "https://hostname/auth/"
PROXY_ADDRESS_FORWARDING = "true"

Если вы не используете версию Docker, вы можете довольно легко перевести, как эти значения передаются в Keycloak, когда он запускается здесь: https://github.com/keycloak/keycloak-containers/blob/11.0.3/server/tools. /docker-entrypoint.sh

Спасибо. Я посмотрю на импорт ключа в контейнере гуакамоле. Некоторое время отсутствовал на рождественских каникулах. Я установил URL-адрес внешнего интерфейса в настройках области после запуска контейнера, и у меня есть переадресация прокси-сервера, установленная на true.

gshepherd7 28.12.2020 13:53

Сейчас я использую действительный сертификат, подписанный ЦС, и я попытался загрузить сертификат и ключ в keycloak, что мне пришлось сделать вручную в контейнере, поскольку для расшифровки ключа требуется парольная фраза, и я нигде не видел в документации о том, как обеспечить, чтобы keycloak не смог загрузить их при запуске контейнера. После этого я создал java-хранилище ключей для своей области в разделе ключей пользовательского интерфейса keycloak. Как только происходит аутентификация, перенаправление обратно на гуакамоле завершается ошибкой, но теперь с ошибкой «Невозможно найти подходящий ключ проверки».... Альтернативное DNS-имя субъекта не соответствует proxy.xxxxx.net. Есть идеи?

gshepherd7 30.12.2020 20:54

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

gshepherd7 06.01.2021 16:48

Рад, что у тебя получилось. Спасибо за продолжение.

Mark Phippard 06.01.2021 18:59

Другие вопросы по теме