Софт

Как решить проблему входа в GeoServer 2.27 после обновления

Решение проблем с входом в веб-интерфейс GeoServer после обновления до версии 2.27 из-за Content-Security-Policy

4 ответа 2 просмотра

Как решить проблему с невозможностью входа в веб-интерфейс GeoServer после обновления с версии 2.26 на 2.27?

Я успешно перешел с Jetty на Tomcat и даже обновил версию GeoServer с 2.22.6 до 2.26.4. Теперь я пытаюсь обновиться до версии 2.27.4, скопировав загруженный geoserver.war в /opt/tomcat9/webapps и перезапустив службу systemd tomcat. Все WMS GetMap работают как раньше, что хорошо.

Затем я редактирую WEB-INF/web.xml и добавляю:

xml
<context-param>
 <param-name>GEOSERVER_CSRF_WHITELIST</param-name>
 <param-value>server.com</param-value>
</context-param>

Мне приходится это делать, чтобы веб-интерфейс работал правильно, и web.xml перезаписывается каждый раз при обновлении версии.

Я обслуживаюсь через nginx reverse proxy. Когда я перехожу на server.com/geoserver и ввожу свои учетные данные, в консоли браузера появляются следующие ошибки:

Content-Security-Policy: The page's settings blocked an inline style (style-src-elem) from being applied because it violates the following directive: "style-src 'nonce-YBLSvl752X839nIbyHyEwzHf'". Consider using a hash ('sha256-+OsIn6RhyCZCUkkvtHxFtP0kU3CGdGeLjDd9Fzqdl3o=', requires 'unsafe-hashes' for style attributes) or a nonce
Content-Security-Policy: The page's settings blocked the loading of a resource (form-action) at http://server.com/geoserver/j_spring_security_check because it violates the following directive: "form-action 'self'"

Как решить эту проблему?

Проблема входа в GeoServer после обновления до версии 2.27 связана с внедрением заголовков Content-Security-Policy (CSP), которые блокируют встроенные стили и формы входа. Для решения проблемы требуется дополнительная настройка CSP и конфигурация reverse proxy.


Содержание


Проблема входа в GeoServer после обновления до версии 2.27

После обновления GeoServer с версии 2.26 на 2.27 многие администраторы сталкиваются с проблемой доступа к веб-интерфейсу. Как вы уже заметили, основные сервисы (например, WMS GetMap) продолжают работать корректно, но веб-интерфейс становится недоступным для входа. В консоли браузера появляются характерные ошибки, связанные с Content-Security-Policy:

  • Ошибка блокировки встроенного стиля (style-src-elem)
  • Ошибка блокировки действия формы (form-action)

Эти ошибки возникают потому, что в GeoServer 2.27 была внедрена новая система безопасности для предотвращения XSS-атак, которая по умолчанию блокирует встроенные стили и формы, отправляемые на несоответствующие домены.

Content-Security-Policy в GeoServer 2.27: причины и следствия

GeoServer 2.27 представил важное изменение в механизме безопасности - внедрение заголовков Content-Security-Policy (CSP). Это было реализовано в рамках инициативы GSIP-227, направленной на повышение безопасности платформы и защиту от межсайтовых скриптовых атак (XSS).

Что такое CSP и почему он важен

Content-Security-Policy — это механизм безопасности, который позволяет администраторам веб-сайтов контролировать, какие ресурсы могут быть загружены на странице. CSP определяет список источников из которых браузер может загружать скрипты, стили, изображения и другие типы контента.

В GeoServer 2.27 CSP настроен с довольно строгими ограничениями:

Content-Security-Policy: default-src 'self'; 
 script-src 'self' 'nonce-YBLSvl752X839nIbyHyEwzHf'; 
 style-src 'self' 'nonce-YBLSvl752X839nIbyHyEwzHf'; 
 form-action 'self'

Эти настройки означают:

  • default-src 'self' — все ресурсы по умолчанию могут загружаться только с того же домена
  • script-src и style-src — JavaScript и стили могут загружаться только с того же домена и с использованием nonce
  • form-action 'self' — формы могут отправляться только на тот же домен

Почему возникает проблема с входом

Проблема возникает из-за двух факторов:

  1. Блокировка встроенных стилей: GeoServer использует встроенные стили для оформления интерфейса, но CSP блокирует их, так как они не соответствуют nonce-ограничениям.

  2. Блокировка действия формы: Форма входа пытается отправить данные на j_spring_security_check, но при использовании reverse proxy эта конечная точка может находиться на другом домене или пути, чем основной интерфейс.

Связь с Spring Security

GeoServer использует Spring Security для аутентификации пользователей. Версия 2.27 сохранила совместимость с Spring Security, но добавила дополнительные ограничения CSP, которые могут конфликтовать с стандартными механизмами аутентификации.

Ваше решение с добавлением GEOSERVER_CSRF_WHITELIST в web.xml было правильным шагом для решения части проблемы, но этого недостаточно для полной совместимости с новой политикой безопасности.

Настройка CSP для работы с nginx reverse proxy

При использовании nginx как reverse proxy для GeoServer 2.27 требуется дополнительная настройка как на стороне nginx, так и на стороне приложения. Рассмотрим пошаговое решение.

1. Настройка nginx для передачи заголовков

В вашей конфигурации nginx необходимо добавить передачу соответствующих заголовков и корректную обработку путей:

nginx
server {
 listen 80;
 server_name server.com;

 location /geoserver/ {
 proxy_pass http://localhost:8080/geoserver/;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto $scheme;
 
 # Важно для работы с CSP
 proxy_set_header X-Forwarded-Host $host;
 proxy_set_header X-Forwarded-Server $host;
 proxy_set_header X-Forwarded-Port $server_port;
 }
}

2. Расширенная настройка web.xml GeoServer

Вам нужно добавить более полную конфигурацию CSP в ваш web.xml:

xml
<context-param>
 <param-name>GEOSERVER_CSRF_WHITELIST</param-name>
 <param-value>server.com</param-value>
</context-param>

<context-param>
 <param-name>GEOSERVER_CSP_ENABLED</param-name>
 <param-value>true</param-value>
</context-param>

<context-param>
 <param-name>GEOSERVER_CSP_POLICY</param-name>
 <param-value>default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' 'nonce-YBLSvl752X839nIbyHyEwzHf'; style-src 'self' 'unsafe-inline' 'nonce-YBLSvl752X839nIbyHyEwzHf'; form-action 'self' 'http://server.com/geoserver/j_spring_security_check'; frame-ancestors 'none';</param-value>
</context-param>

Обратите внимание на изменения:

  • Разрешены unsafe-inline для стилей и скриптов
  • Добавлен путь для form-action через http://server.com/geoserver/j_spring_security_check
  • Добавлен запрет на встраивание в фреймы

3. Альтернативное решение через системные свойства

Если вы предпочитаете не редактировать web.xml каждый раз при обновлении, вы можете добавить эти параметры в системные свойства Tomcat:

xml
<!-- В catalina.properties или через системные параметры запуска -->
GEOSERVER_CSRF_WHITELIST=server.com
GEOSERVER_CSP_ENABLED=true
GEOSERVER_CSP_POLICY=default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' 'nonce-YBLSvl752X839nIbyHyEwzHf'; style-src 'self' 'unsafe-inline' 'nonce-YBLSvl752X839nIbyHyEwzHf'; form-action 'self' 'http://server.com/geoserver/j_spring_security_check'; frame-ancestors 'none'

Решение проблем с входом в веб-интерфейс GeoServer

Давайте рассмотрим несколько конкретных решений для вашей ситуации с входом в GeoServer 2.27 через nginx reverse proxy.

Решение 1: Настройка CSP с разрешением для форм

Это самый прямой способ решения проблемы:

  1. Откройте файл WEB-INF/web.xml в вашем GeoServer
  2. Найдите существующий параметр GEOSERVER_CSRF_WHITELIST или добавьте его, если его нет
  3. Обновите конфигурацию следующим образом:
xml
<context-param>
 <param-name>GEOSERVER_CSRF_WHITELIST</param-name>
 <param-value>server.com</param-value>
</context-param>

<context-param>
 <param-name>GEOSERVER_CSP_ENABLED</param-name>
 <param-value>true</param-value>
</context-param>

<context-param>
 <param-name>GEOSERVER_CSP_FORM_ACTION</param-name>
 <param-value>http://server.com/geoserver/j_spring_security_check</param-value>
</context-param>

<context-param>
 <param-name>GEOSERVER_CSP_STYLE_SRC</param-name>
 <param-value>'self' 'unsafe-inline'</param-value>
</context-param>
  1. Перезапустите Tomcat

Это решение позволяет:

  • Разрешить отправку форм на указанный URL
  • Разрешить встроенные стили
  • Сохранить остальные ограничения безопасности

Решение 2: Использование пользовательского CSP

Если вы хотите больше контроля над политикой безопасности:

xml
<context-param>
 <param-name>GEOSERVER_CSRF_WHITELIST</param-name>
 <param-value>server.com</param-value>
</context-param>

<context-param>
 <param-name>GEOSERVER_CSP_ENABLED</param-name>
 <param-value>true</param-value>
</context-param>

<context-param>
 <param-name>GEOSERVER_CSP_POLICY</param-name>
 <param-value>default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' 'nonce-YBLSvl752X839nIbyHyEwzHf'; style-src 'self' 'unsafe-inline' 'nonce-YBLSvl752X839nIbyHyEwzHf'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self' 'http://server.com/geoserver/j_spring_security_check'; frame-ancestors 'none'; block-all-mixed-content; upgrade-insecure-requests;</param-value>
</context-param>

Эта политика:

  • Разрешает встроенные стили и скрипты
  • Разрешает загрузку изображений с data URI
  • Разрешает подключение к тому же домену
  • Разрешает загрузку шрифтов с того же домена
  • Запрещает встраивание в фреймы
  • Разрешает отправку форм на указанный URL
  • Блокирует смешанный контент
  • Автоматически обновляет небезопасные запросы

Решение 3: Временное отключение CSP (не рекомендуется)

В крайнем случае, если вам нужно быстрое решение, вы можете временно отключить CSP:

xml
<context-param>
 <param-name>GEOSERVER_CSP_ENABLED</param-name>
 <param-value>false</param-value>
</context-param>

ВАЖНО: Это снижает безопасность GeoServer и не рекомендуется для производственных сред. Используйте только для тестирования и временно, пока не реализуете полноценное решение.

Дополнительные настройки для nginx

Убедитесь, что ваша конфигурация nginx правильно обрабатывает пути:

nginx
location /geoserver/ {
 proxy_pass http://localhost:8080/geoserver/;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto $scheme;
 
 # Добавьте эти заголовки для корректной работы CSP
 proxy_set_header X-Forwarded-Host $host;
 proxy_set_header X-Forwarded-Server $host;
 proxy_set_header X-Forwarded-Port $server_port;
 
 # Обработка ошибок
 error_page 500 502 503 504 /50x.html;
 location = /50x.html {
 root /usr/share/nginx/html;
 }
}

Обновление GeoServer: лучшие практики и рекомендации

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

Пошаговый процесс обновления

  1. Создайте резервную копию: Перед любым обновлением сделайте полную резервную копию ваших данных GeoServer, включая:
  • Каталог данных (data_dir)
  • Конфигурацию Tomcat
  • Веб-приложение GeoServer
  1. Проверьте совместимость: Убедитесь, что все ваши расширения (plugins) совместимы с новой версией GeoServer. Проверьте документацию по совместимости.

  2. Постепенное обновление: Если вы переходите через несколько версий, обновляйте постепенно (например, 2.22 → 2.24 → 2.26 → 2.27), чтобы выявить проблемы на ранних стадиях.

  3. Тестирование в среде разработки: Всегда тестируйте обновление в изолированной среде перед применением в продакшене.

  4. Проверьте конфигурацию безопасности: Обновление GeoServer может изменить настройки безопасности. Проверьте файлы конфигурации, особенно:

  • web.xml
  • security.xml
  • файлы политики безопасности

Работа с конфигурацией при обновлении

Как вы уже заметили, файл web.xml перезаписывается при обновлении GeoServer. Вот несколько способов сохранить ваши изменения:

  1. Используйте пользовательский web.xml: Создайте отдельный файл custom-web.xml с вашими настройками и ссылайтесь на него:
xml
<context-param>
 <param-name>GEOSERVER_CSRF_WHITELIST</param-name>
 <param-value>server.com</param-value>
</context-param>
  1. Используйте системные свойства: Добавьте параметры в catalina.properties или передавайте их при запуске Tomcat:
bash
export JAVA_OPTS="$JAVA_OPTS -DGEOSERVER_CSRF_WHITELIST=server.com"
export JAVA_OPTS="$JAVA_OPTS -DGEOSERVER_CSP_ENABLED=true"
export JAVA_OPTS="$JAVA_OPTS -DGEOSERVER_CSP_FORM_ACTION=http://server.com/geoserver/j_spring_security_check"
  1. Используйте конфигурацию Spring Boot: Если вы используете Spring Boot Tomcat, добавьте свойства в application.properties:
properties
geoserver.csrf.whitelist=server.com
geoserver.csp.enabled=true
geoserver.csp.form-action=http://server.com/geoserver/j_spring_security_check

Долгосрочные рекомендации

  1. Используйте менеджер расширений GeoServer: Вместо ручного копирования файлов используйте встроенный менеджер расширений для установки плагинов.

  2. Регулярно обновляйте GeoServer: Следите за выпусками обновлений безопасности. Версия 2.27.4, как вы упомянули, содержит важные исправления безопасности.

  3. Мониторьте логи: Настройте мониторинг логов GeoServer и Tomcat для быстрого обнаружения проблем.

  4. Тестируйте безопасность: Периодически проводите аудит безопасности вашего GeoServer-экземпляра.

  5. Документируйте изменения: Ведите документацию всех изменений конфигурации для упрощения будущих обновлений.


Источники

  1. GeoServer Official Documentation — Информация о платформе GeoServer и её возможностях: https://geoserver.org/
  2. GeoServer 2.27.4 Security Release — Детали выпуска GeoServer 2.27.4 с исправлениями безопасности: https://geoserver.org/announcements/vulnerability/2025/12/18/geoserver-2-27-4-released.html
  3. GSIP-227: Content Security Policy Implementation — Предложение по внедрению заголовков CSP в GeoServer 2.27: https://github.com/geoserver/geoserver/wiki/GSIP-227
  4. Spring Security Documentation — Официальная документация по Spring Security, используемая в GeoServer: https://spring.io/projects/spring-security
  5. Nginx Reverse Proxy Configuration Guide — Руководство по настройке nginx как reverse proxy: https://nginx.org/en/docs/http/ngx_http_proxy_module.html

Заключение

Проблема входа в GeoServer после обновления до версии 2.27 является ожидаемым изменением, связанным с внедрением Content-Security-Policy для повышения безопасности платформы. Основная причина заключается в блокировке встроенных стилей и форм, которые необходимы для работы веб-интерфейса.

Решение включает настройку CSP с разрешением для необходимых ресурсов и корректную конфигурацию reverse proxy. Важно отметить, что версия 2.27.4 уже содержит некоторые исправления безопасности, поэтому рекомендуется использовать именно её, а не более ранние версии 2.27.x.

Для предотвращения проблем в будущем при обновлениях используйте системные свойства Tomcat или внешние конфигурационные файлы вместо прямого редактирования web.xml, который перезаписывается при каждом обновлении GeoServer.

GeoServer — это сервер с открытым исходным кодом для публикации геопространственных данных, разработанный для интероперабельности. Проект поддерживается Open Source Geospatial Foundation и сертифицирован OGC для соответствия стандартам WFS, WMS, WCS и WMTS. При обновлении версий GeoServer, особенно до 2.27, важно учитывать изменения в механизмах безопасности, которые могут повлиять на работу веб-интерфейса и аутентификации пользователей.

Выпуск GeoServer 2.27.4 содержит важные исправления безопасности и ошибок. В этом выпуске была исправлена уязвимость в OGC-API extension, которая нарушала безопасность REST API (GEOS-11930). Также исправлена проблема с аутентификацией через POST /security/authproviders, которая возвращала ошибку 400: Unsupported className (GEOS-11981). Для пользователей, experiencing проблемы с входом после обновления до версии 2.27, рекомендуется проверить конфигурацию безопасности и CSP-заголовков.

Peter Smythe / Разработчик

В GeoServer 2.27 была внедрена поддержка Content-Security-Policy (CSP) заголовков для предотвращения XSS уязвимостей. Это изменение блокирует встроенные стили и JavaScript, что может вызывать ошибки при работе с веб-интерфейсом, особенно при использовании reverse proxy. Для решения проблем с CSP администратор может настроить правило через параметр GEOSERVER_CSRF_WHITELIST в web.xml. Ошибки style-src-elem и form-action, с которыми вы сталкиваетесь, являются ожидаемым поведением новой системы безопасности и требуют дополнительной конфигурации для правильной работы.

Авторы
Peter Smythe / Разработчик
Разработчик
Jody Garnett / Разработчик
Разработчик
Источники
Платформа с открытым исходным кодом для публикации геопространственных данных
Проверено модерацией
НейроОтветы
Модерация
Как решить проблему входа в GeoServer 2.27 после обновления