Открыть сервис

Apache WSS4J

Apache WSS4J — это библиотека с открытым исходным кодом на языке Java, предназначенная для реализации спецификаций веб-служб (WS-Security), обеспечивающая подпись, шифрование, аутентификацию и обработку токенов безопасности в сообщениях SOAP. Проект является частью экосистемы Apache Software Foundation и используется для защиты обмена данными в корпоративных информационных системах, построенных на основе веб-служб и архитектуры SOA (Service-Oriented Architecture).

История

Проект WSS4J (Web Services Security for Java) был создан как подпроект Apache Web Services. Первоначально он разрабатывался в рамках проекта Apache Axis, а затем был выделен в самостоятельный проект. В 2006 году WSS4J стал частью Apache CXF — одного из основных фреймворков для веб-служб на Java. В 2011 году проект был переведён в категорию «Apache Attic» (архив), но затем возобновил активную разработку в рамках Apache CXF, сохранив отдельный репозиторий и жизненный цикл версий.

Основные вехи развития:

  • 2004 год — первый публичный релиз WSS4J 1.0.
  • 2008 год — выход WSS4J 1.5 с поддержкой WS-SecurityPolicy.
  • 2012 год — начало разработки WSS4J 2.0, ориентированного на Apache CXF 3.x.
  • 2015 год — выпуск WSS4J 2.1 с поддержкой стандартов WS-Trust и WS-SecureConversation.
  • 2020-е годы — продолжение выпуска обновлений, включая поддержку современных криптографических алгоритмов и исправления уязвимостей.

Архитектура и компоненты

WSS4J реализует спецификации WS-Security (OASIS Standard), а также смежные стандарты: WS-SecurityPolicy, WS-Trust, WS-SecureConversation, SAML (Security Assertion Markup Language) и X.509. Библиотека работает на уровне обработки сообщений SOAP, встраиваясь в перехватчики (interceptors) фреймворков веб-служб, таких как Apache CXF, Axis 2 или Spring WS.

Основные модули

  1. Криптографическая обработка — подпись и шифрование XML-содержимого сообщений с использованием стандартов XML Signature и XML Encryption.
  2. Обработка токенов безопасностиподдержка токенов:
  • Username Token (аутентификация по имени пользователя и паролю);
  • X.509 Certificate Token (сертификаты);
  • SAML Assertion (утверждения SAML 1.1/2.0);
  • Kerberos Token (билеты Kerberos);
  • Binary Security Token (произвольные двоичные токены).
  1. Поддержка WS-SecurityPolicy — автоматическое применение политик безопасности, описанных в WSDL.
  2. WS-Trust — реализация протокола выдачи, обновления и проверки токенов безопасности через службу STS (Security Token Service).
  3. WS-SecureConversation — установление защищённых сессий с использованием производных ключей.

Взаимодействие с фреймворками

WSS4J не является самостоятельным сервером или клиентом веб-служб. Он интегрируется в существующие решения через API-интерфейсы. В Apache CXF WSS4J используется как провайдер безопасности по умолчанию. В Axis 2 WSS4J подключается через модуль Rampart. Для Spring WS существует отдельная интеграция через модуль spring-ws-security.

Функциональные возможности

Подпись и шифрование

WSS4J поддерживает:

  • Подпись всего сообщения SOAP или отдельных его частей (элементов Body, Header, Attachments).
  • Шифрование тела сообщения и/или заголовков.
  • Комбинирование подписи и шифрования в одном сообщении.
  • Использование симметричных и асимметричных алгоритмов: RSA, AES, Triple DES, HMAC-SHA1/256/384/512.

Аутентификация

  • Username Token — передача имени пользователя и пароля (в открытом виде или в виде хэша с меткой времени).
  • X.509 Certificate Token — проверка цепочки сертификатов, подпись сообщения закрытым ключом.
  • SAML Assertion — проверка утверждений, выпущенных провайдером идентификации (IdP).
  • Kerberos Token — интеграция с протоколом Kerberos (в том числе с Windows Active Directory).

Политики безопасности

WSS4J поддерживает декларативное описание политик в формате WS-SecurityPolicy. Политика может быть встроена непосредственно в WSDL-описание веб-службы или задана программно. Примеры политик:

  • «Подписать и зашифровать тело сообщения»;
  • «Требовать токен UsernameToken с паролем в виде хэша»;
  • «Использовать сертификат X.509 для подписи и шифрования».

Применение

WSS4J используется в корпоративных системах, где требуется безопасный обмен данными между приложениями, часто в гетерогенных средах (Java, .NET, Python и др.). Основные области применения:

В России WSS4J применяется в системах, построенных на платформе Java, в том числе в решениях для электронного документооборота (например, на базе Apache CXF) и в государственных информационных системах, где требуется соответствие стандартам безопасности.

Критика и ограничения

  • Сложность конфигурации — настройка WSS4J требует глубокого понимания стандартов WS-Security и криптографии. Ошибки в конфигурации могут привести к уязвимостям.
  • Производительность — криптографические операции (особенно шифрование и подпись) создают дополнительную нагрузку, что может быть критично для высоконагруженных систем.
  • Устаревание стандартов — некоторые спецификации WS-Security (например, WS-Trust 1.3) постепенно вытесняются более современными протоколами, такими как OAuth 2.0 и OpenID Connect. Однако для унаследованных систем WSS4J остаётся актуальным.
  • Зависимость от XML — обработка XML-сообщений требует значительных вычислительных ресурсов по сравнению с JSON или Protobuf.

Пример использования

Ниже приведён упрощённый пример конфигурации WSS4J в Apache CXF для подписи и шифрования сообщения:

``java // Настройка перехватчика WSS4JOutInterceptor Map<String, Object> props = new HashMap<>(); props.put("action", "Signature Encrypt"); props.put("user", "mykey"); props.put("signaturePropFile", "crypto.properties"); props.put("encryptionPropFile", "crypto.properties"); props.put("signatureKeyIdentifier", "DirectReference"); props.put("encryptionKeyIdentifier", "IssuerSerial"); WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(props); ``

Для клиентской стороны используется аналогичный WSS4JInInterceptor.

Интересные факты

  • WSS4J является одной из старейших активно поддерживаемых библиотек для WS-Security в Java (более 20 лет).
  • Проект используется в ряде коммерческих продуктов, включая IBM WebSphere, Oracle WebLogic и Red Hat JBoss, хотя в них применяются собственные реализации безопасности.
  • В 2020 году в WSS4J была обнаружена уязвимость CVE-2020-13957, связанная с неправильной обработкой XML-расширений, что привело к выпуску исправлений в версии 2.2.4.

Источники

  • Apache WSS4J — официальная документация проекта (Apache Software Foundation).
  • OASIS Standard — Web Services Security: SOAP Message Security 1.1 (2006).
  • OASIS Standard — WS-SecurityPolicy 1.2 (2007).
  • OASIS Standard — WS-Trust 1.4 (2009).
  • OASIS Standard — WS-SecureConversation 1.4 (2009).
  • Спецификация XML Signature Syntax and Processing (W3C, 2008).
  • Спецификация XML Encryption Syntax and Processing (W3C, 2002).
  • Apache CXF — руководство пользователя по безопасности (раздел WSS4J).
  • CVE-2020-13957 — запись в базе данных уязвимостей (MITRE).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →