当前位置: 首页 > 知识库问答 >
问题:

org.opensaml.saml2.metadata.provider.FilterException:元数据输入的签名信任建立失败

刘奇
2023-03-14

在安全上下文中配置 IDP 后,当我尝试运行我的服务器时,我收到以下异常.xml。

原因:org.opensaml.saml2.metadata.provider。筛选器异常:元数据条目的签名信任建立失败

我看到 http://forum.spring.io/forum/spring-projects/security/saml/108450-getting-error-signature-trust-establishment-failed-for-metadata-entry 个链接中有一个解决方法,它说,通过在包含您的IDP元数据的扩展元数据上将属性元数据TrustCheck设置为false。

但是我不想更新saml2核心api,相反,可以在securityContext.xml.中设置metadataTrustCheck。如果是这样,如何设置它。我按照下面的方式尝试了。但是仍然得到同样的错误。

<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>

我的元数据管理器定义如下:

<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>

请帮帮忙。谢谢。

共有2个答案

万涵亮
2023-03-14

在Java Config版本中,在将信任检查标志设置为false之后,我必须针对metadataProvider对象手动调用initialize方法。

@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;
}
督冠玉
2023-03-14

只有部分MetadataProviders被包装在ExtendedMetadataDelegate中。您必须在每个MetadataProvider上将metadataTrustCheckflag设置为false

<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>

 类似资料:
  • 为了从远程源获取元数据,我定义了一个bean,如下所示: 为了确保签名信任的建立,我在JDK密钥库和应用程序密钥库中添加了相关的密钥(第二步可能还不够);尽管如此,运行webapp时还是会出错。 错误通过设置消失: ...但是我想检查用过的元数据。 有没有办法解决这个错误? 我尝试按如下方式设置,但错误仍然存在。

  • 问题内容: 我试图使用(java)密钥工具创建一个自签名证书,但是当我尝试使用它时,出现以下异常(有关完整异常,请参见底部)。 我知道我可以使用以下代码绕过此代码: (资源) 但是我对此解决方案不感兴趣,因为我认为这会造成安全漏洞。(如果我错了,请纠正我)。 谁能指出我正确的方向?我目前正在本地进行测试,因此很容易进行更改。我可以访问服务器代码,客户端代码和.keystore文件。 更新资料 我试

  • “引发异常:System.dll中的'System.Net.WebException'” 其他信息:基础连接已关闭:无法为SSL/TLS安全通道建立信任关系。" 我已经为我的本地机器和当前用户将我的自签名证书添加/导入到Trusted RootCA,但我仍然收到上述异常。 你知道为什么我会这样吗。net还不接受我的证书吗?

  • 问题内容: 我想对使用自签名证书的安全服务器进行AJAX调用。在使用我的应用程序的环境中,这很好- 我可以向用户提供CA证书,并让他们在使用该应用程序之前安装它。但是,有时,用户会在安装证书之前尝试访问该应用程序。在这些情况下,该应用程序会静默失败- 至少在Firefox(问题的最常见情况)中,似乎该调用会静默死,甚至不会触发错误处理程序。FWIW,如果用户访问服务器上的实际 页面 ,则会收到证书

  • 但是,在查看REST API文档时,会指出API在将选项卡发送给接收者时检索选项卡的原始值(originalValue)。 这正是我发现的行为。是否存在其他方法来检索签名者输入的数据?

  • 我正试图将我的计算机配置为信任用于测试网站的自签名证书。然而,我在Firefox上遇到了一些问题。Chrome和IE都没问题。 我做了以下几点。 使用OpenSSL创建2048位pem rsa密钥和crt 从密钥和crt文件创建pfx文件 使用MMC将pfx导入到服务器上的个人证书存储中 将IIS配置为使用站点的证书 在客户端PC上 null 我还尝试将证书直接添加到Firefox的权限列表中。它