Поддержка 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 по умолчанию и используя явные объявления зависимостей для обеих библиотек (по одному).

Мои вопросы:

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

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


person Bart Blommaerts    schedule 26.09.2012    source источник
comment
не понятно и требует самообучения и поиска   -  person Vivek Panday    schedule 30.04.2015


Ответы (3)


Интересная у вас проблема.

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

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

Что вы могли бы сделать, основываясь на такой-как-бан">это SO и особенно эта SO реализует ваш собственный WebServiceTemplate/WebServiceMessageSender.

person D. Kovács    schedule 05.01.2017
comment
Верно, я долго искал способ заставить .NET генерировать X509PKIPathV1, и на этой странице они очень ясно говорят о несовместимости. msdn.microsoft.com/es-es/library /bb885188(v=vs.110).aspx Профили токенов WSS X509 1.0 и 1.1 также определяют #X509PKIPathv1 и #PKCS7 как типы значений. WCF не поддерживает эти типы. - person Ualter Jr.; 18.05.2017

Тип значения может быть #X509v3, #X509PKIPathv1.

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

person l3thal    schedule 02.06.2015
comment
В документации (и JavaDoc) говорится, что .. Установщик, очевидно, этого не делает. - person Bart Blommaerts; 02.06.2015

Этот запрос на включение позволит использовать X509PKIPathv1.

person Jonas    schedule 18.02.2020