org.opensaml.saml2.metadata.provider.FilterException: не удалось установить доверие к подписи для записи метаданных

Я получаю следующее исключение, когда пытаюсь запустить свой сервер после настройки своего IDP в securityContext.xml.

Вызвано: org.opensaml.saml2.metadata.provider.FilterException: не удалось установить доверительные отношения подписи для записи метаданных

Я видел обходной путь в http://forum.spring.io/forum/spring-projects/security/saml/108450-getting-error-signature-trust-establishment-failed-for-metadata-запись ссылку, где говорится, установив для свойства metadataTrustCheck значение false в компоненте ExtendedMetadataDelegate, который включает ваши метаданные IDP.

Но я не хочу обновлять api ядра saml2, вместо этого можно установить metadataTrustCheck в securityContext.xml. Если да, то как его настроить. Я пробовал, как указано ниже. Но все равно возникает та же ошибка.

<bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
<constructor-arg>
<bean class="org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider">
<constructor-arg>
<value type="java.io.File">classpath:metadata/services/MyMetadata.xml</value>
</constructor-arg>
<property name="parserPool" ref="parserPool"/>
</bean>
</constructor-arg>
<constructor-arg>
<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
</bean>
</constructor-arg>
<property name="metadataTrustCheck" value="false"/>
</bean>

Мой MetadataManager определяется следующим образом:

<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
    <constructor-arg>
        <list>
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
                <constructor-arg>
                    <bean class="org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider">
                        <constructor-arg>
                            <value type="java.io.File">classpath:metadata/services/FederationMetadata.xml</value>
                        </constructor-arg>
                        <property name="parserPool" ref="parserPool"/>
                    </bean>
                </constructor-arg>
                <constructor-arg>
                    <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
                    </bean>
                </constructor-arg>
                <property name="metadataTrustCheck" value="false"/>
            </bean>
            <bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider">
                <!-- URL containing the metadata -->
                <constructor-arg>
                    <value type="java.lang.String">https://adfsserver1.com/FederationMetadata/2007-06/FederationMetadata.xml</value>
                </constructor-arg>
                <!-- Timeout for metadata loading in ms -->
                <constructor-arg>
                    <value type="int">5000</value>
                </constructor-arg>
                <property name="parserPool" ref="parserPool"/>
            </bean>
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
                <constructor-arg>
                    <bean class="org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider">
                        <constructor-arg>
                            <value type="java.io.File">classpath:metadata/capital/FederationMetadata.xml</value>
                        </constructor-arg>
                        <property name="parserPool" ref="parserPool"/>
                    </bean>
                </constructor-arg>
                <constructor-arg>
                    <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
                    </bean>
                </constructor-arg>
                <property name="metadataTrustCheck" value="false"/>
            </bean>
            <bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider">
                <!-- URL containing the metadata -->
                <constructor-arg>
                    <value type="java.lang.String">https://adfsserver2.com/FederationMetadata/2007-06/FederationMetadata.xml</value>
                </constructor-arg>
                <!-- Timeout for metadata loading in ms -->
                <constructor-arg>
                    <value type="int">5000</value>
                </constructor-arg>
                <property name="parserPool" ref="parserPool"/>
            </bean>
        </list>
    </constructor-arg>
</bean>

Пожалуйста, помогите с этим. Спасибо.


person Kannan    schedule 07.10.2014    source источник
comment
Можете ли вы опубликовать свой полный bean-компонент CachingMetadataManager?   -  person Vladimír Schäfer    schedule 07.10.2014
comment
Привет, Владимир, приятно тебя слышать. Я использую spring-security-saml2-core: 1.0.1.BUILD-SNAPSHOT.jar. Я не менял ни один из существующих кодов API ядра.   -  person Kannan    schedule 08.10.2014
comment
Первоначально я использовал ваш исходный код saml2-core и изменил metadataTrustCheck на false в файле ExtendedMetadataDelegate.java и построил файл jar. Это сработало. Теперь я пытаюсь использовать SNAPSHOT там, где вышеупомянутого изменения не будет. Вместо этого я могу переопределить значение metadataTrustCheck в securityContext.xml, используя ‹имя свойства = значение metadataTrustCheck = false /›. поправьте меня, если я ошибаюсь.   -  person Kannan    schedule 08.10.2014
comment
Я спрашивал о конфигурации bean-компонента CachingMetadataManaer, а не об источниках - я хочу увидеть, как выглядит ваша конфигурация Spring. MetadtaTrustCheck должен работать нормально, я подозреваю, что вы установили его для неправильного поставщика метаданных. Установка metadataTrustCheck в false - правильный подход.   -  person Vladimír Schäfer    schedule 08.10.2014
comment
В этой строке комментария я не могу добавить компонент. есть ли другой способ поделиться им.   -  person Kannan    schedule 08.10.2014
comment
Вы всегда можете отредактировать свой вопрос и добавить туда дополнительный контент.   -  person Vladimír Schäfer    schedule 08.10.2014
comment
Прекрасно работает Владимир ... Большое спасибо.   -  person Kannan    schedule 08.10.2014


Ответы (2)


Только некоторые из ваших MetadataProviders были завернуты в ExtendedMetadataDelegate. Вы должны установить флаг metadataTrustCheck на false на каждом MetadataProvider, который должен пропускать проверку доверия, а не только на некоторых из них. Определите поставщика метаданных следующим образом, и ваша проблема должна исчезнуть:

<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
    <constructor-arg>
        <list>
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
                <constructor-arg>
                    <bean class="org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider">
                        <constructor-arg>
                            <value type="java.io.File">classpath:metadata/services/FederationMetadata.xml</value>
                        </constructor-arg>
                        <property name="parserPool" ref="parserPool"/>
                    </bean>
                </constructor-arg>
                <constructor-arg>
                    <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
                    </bean>
                </constructor-arg>
                <property name="metadataTrustCheck" value="false"/>
            </bean>
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
                <constructor-arg>
                    <bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider">
                        <!-- URL containing the metadata -->
                        <constructor-arg>
                            <value type="java.lang.String">
                                https://adfsserver1.com/FederationMetadata/2007-06/FederationMetadata.xml
                            </value>
                        </constructor-arg>
                        <!-- Timeout for metadata loading in ms -->
                        <constructor-arg>
                            <value type="int">5000</value>
                        </constructor-arg>
                        <property name="parserPool" ref="parserPool"/>
                    </bean>
                </constructor-arg>
                <constructor-arg>
                    <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
                    </bean>
                </constructor-arg>
                <property name="metadataTrustCheck" value="false"/>
            </bean>
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
                <constructor-arg>
                    <bean class="org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider">
                        <constructor-arg>
                            <value type="java.io.File">classpath:metadata/capital/FederationMetadata.xml</value>
                        </constructor-arg>
                        <property name="parserPool" ref="parserPool"/>
                    </bean>
                </constructor-arg>
                <constructor-arg>
                    <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
                    </bean>
                </constructor-arg>
                <property name="metadataTrustCheck" value="false"/>
            </bean>
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
                <constructor-arg>
                    <bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider">
                        <!-- URL containing the metadata -->
                        <constructor-arg>
                            <value type="java.lang.String">
                                https://adfsserver2.com/FederationMetadata/2007-06/FederationMetadata.xml
                            </value>
                        </constructor-arg>
                        <!-- Timeout for metadata loading in ms -->
                        <constructor-arg>
                            <value type="int">5000</value>
                        </constructor-arg>
                        <property name="parserPool" ref="parserPool"/>
                    </bean>
                </constructor-arg>
                <constructor-arg>
                    <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
                    </bean>
                </constructor-arg>
                <property name="metadataTrustCheck" value="false"/>
            </bean>
        </list>
    </constructor-arg>
</bean>
person Vladimír Schäfer    schedule 08.10.2014
comment
У меня точно такая же проблема. Отмечен каждый bean-компонент ExtendedMetadataDelegate с помощью metadataTrustCheck как ложный, но по-прежнему возникает та же ошибка. Файл конфигурации доступен здесь. - person Mohnish; 24.10.2014

В версии Java Config мне приходилось вручную вызывать метод инициализации для объекта metadataProvider после того, как я установил флаг проверки доверия на false.

@SamlBeanAnnotation
@Qualifier("metadata")
public CachingMetadataManager metadata() throws MetadataProviderException, ResourceException {
    List<MetadataProvider> providers = new ArrayList<MetadataProvider>();
    for (String file: getSamlProviders()) {
        ResourceBackedMetadataProvider metadataProvider = new ResourceBackedMetadataProvider(new Timer(),
                new org.opensaml.util.resource.ClasspathResource("/" + file.trim()));
        metadataProvider.setParserPool(parserPool());

        ExtendedMetadataDelegate extendedMetadataDelegate =
            new ExtendedMetadataDelegate(metadataProvider, new ExtendedMetadata());
        extendedMetadataDelegate.setMetadataTrustCheck(false);
        extendedMetadataDelegate.setMetadataRequireSignature(false);
        metadataProvider.initialize();
        providers.add(metadataProvider);
    }

    CachingMetadataManager cachingMetadataManager= new CachingMetadataManager(providers);
    return cachingMetadataManager;
}
person Mihaita Tinta    schedule 11.08.2015