Подтвердить что ты не робот

Поддержка X509PKIPathv1 в xws-security для Spring -WS

Я пытаюсь отправить запрос на существующий веб-сервис. Этот веб-сервис не управляется мной. Политика безопасности этого веб-сервиса требует, чтобы я отправил свою полную цепочку сертификатов в мой запрос SOAP. Моя цепочка сертификатов содержит 3 сертификата. Нет проблем с настройкой цепочки сертификатов, так как я могу проверить его достоверность (и сделал это).

Конфигурация безопасности для этой установки (= отправка всей цепочки сертификатов в запросе):

<xwss:Sign id="signature">
   <xwss:X509Token 
        certificateAlias="alias" 
        keyReferenceType="Direct"
        valueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1" />
</xwss:Sign>

Я пытаюсь достичь этого через Spring-WS. Spring -WS использует Spring -ws-security для обеспечения безопасности. Spring -ws-security делегаты для xws-security.

    <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-ws-security</artifactId>
        <version>2.1.0.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.ws.security</groupId>
                <artifactId>wss4j</artifactId>
            </exclusion>            
            <exclusion>
                <groupId>com.sun.xml.wsit</groupId>
                <artifactId>xws-security</artifactId>
            </exclusion>            
        </exclusions>
     </dependency>

Xws-security поставляется в двух вариантах:

    <dependency>
        <groupId>com.sun.xml.wsit</groupId>
        <artifactId>xws-security</artifactId>
        <version>1.3.1</version>
    </dependency>

и

    <dependency>
        <groupId>com.sun.xml.wss</groupId>
        <artifactId>xws-security</artifactId>
        <version>3.0</version>
    </dependency>

Первый используется Spring WS Security. Второй - это наследие.

Применение моей конфигурации XWSS в xws-security выполняется в классе BinarySecurityToken. BinarySecurityToken имеет поле под названием

valueType

JavaDoc valueType говорит, что он поддерживает X509PKIPathv1 (среди прочих). Однако, это не указано, как указано этим установщиком:

    protected void setValueType(String valueType) {
    if (!(MessageConstants.X509v3_NS.equals(valueType)||MessageConstants.X509v1_NS.equals(valueType))) { 
        log.log(Level.SEVERE,"WSS0342.valtype.invalid");
        throw new RuntimeException("Unsupported value type: " + valueType);
    }
    this.valueType = valueType;
}

Класс MessageConstants не имеет (даже) статического значения для X509PKIPathv1. Когда я запускаю свой код, я получаю ожидаемый результат:

Unsupported value type: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1

Я смог посмотреть исходный код старого com.sun.xml.wss.xws-security:3.0. Несмотря на мои усилия, я не нашел исходный код com.sun.xml.wsit.xws-security-1.3.1. Однако я считаю, что код тот же. Я попробовал обе библиотеки, и оба дают мне одно и то же исключение. Я попробовал это, используя стандартную Spring -ws-security и используя явные объявления зависимостей для обеих библиотек (по одному за раз).

Мои вопросы:

  • Кто-нибудь мог использовать xws-security для генерации подписи X509 с типом value X509PKIPathv1 и keyReferenceType, который является Direct?
  • Существуют ли другие реализации xws-security, которые предлагают это? Или я должен смотреть на совершенно другой подход, как Wss4j?

Я рассмотрел переписывание BinarySecurityToken, но это, вероятно, также предполагает переписывание подписи SignatureProcessor X509 в DSIG.

4b9b3361

Ответ 1

Интересная проблема, которую вы получили там.

Насколько я могу судить по моему Google-fu, в некоторых проектах существует поддержка # X509PKIPathv1 (например, Oracle XMLSec или Открыть SAML), однако он не является широко распространенным и даже приложением вроде Soap UI не поддерживают его для SOAP-WS.

Не только это, но и другие языки/фреймворки имеют одинаковую поддержку, например Delphi и . NET, IBM JRE.

Что вы можете сделать на основе this SO и особенно this SO реализует свой собственный WebServiceTemplate/WebServiceMessageSender.

Ответ 2

ЗначениеType может быть # X509v3, # X509PKIPathv1

Это можно найти здесь XWS-SecurityIntro4 Вы пробовали эти значения специально вместо URL?