2014-10-07 3 views
0

Я получаю следующее исключение, пока я пытаюсь запустить свой сервер после настройки моего IDP в securityContext.xml.org.opensaml.saml2.metadata.provider.FilterException: установка доверия подписи не удалась для записи метаданных

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

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

Но я не хочу обновлять ядро ​​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> 

Пожалуйста, помогите в этом. Благодарю.

+0

Можете ли вы разместить свой полный компонент CachingMetadataManager? –

+0

Эй, Владимир, Приятно слышать от тебя. Я использую Spring-security-saml2-core: 1.0.1.BUILD-SNAPSHOT.jar. Я не изменил ни одного из кода API ядра. – Kannan

+0

Первоначально я использовал источник saml2-core и изменил metadataTrustCheck на false в файле ExtendedMetadataDelegate.java и создал файл jar. Он работал хорошо. Теперь я пытаюсь использовать SNAPSHOT, где вышеупомянутое изменение не будет там. Вместо этого я могу переопределить значение metadataTrustCheck в securityContext.xml, используя . исправьте меня, если я ошибаюсь. – Kannan

ответ

0

Только некоторые из ваших 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> 
+0

У меня такая же проблема. Пометить каждый компонент ExtendedMetadataDelegate метаданныхTrustCheck как false, но все равно получить ту же ошибку. Файл конфигурации доступен [здесь] (https://gist.github.com/mohnish82/ad7501b1b585c9f881b2). – Mohnish

1

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

@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; 
} 
Смежные вопросы