gpt4 book ai didi

java - Spring SAML 握手失败 - 无法根据可信 key 验证不受信任的凭证

转载 作者:行者123 更新时间:2023-11-30 09:00:58 26 4
gpt4 key购买 nike

我正在使用 Spring Security SAML 扩展与 ACA 医疗保健(又名 Obamacare)网站集成。它使用 IDP 发起的 SSO。 SAML 握手失败,输出如下

org.opensaml.xml.security.keyinfo.provider.InlineX509DataProvider] Single certificate was present, treating as end-entity certificate
org.opensaml.xml.security.keyinfo.BasicProviderKeyInfoCredentialResolver] Credentials successfully extracted from child {http://www.w3.org/2000/09/xmldsig#}X509Data by provider org.opensaml.xml.security.keyinfo.provider.InlineX509DataProvider
org.opensaml.xml.security.keyinfo.BasicProviderKeyInfoCredentialResolver] A total of 1 credentials were resolved
org.opensaml.xml.security.credential.criteria.EvaluableCredentialCriteriaRegistry] Registry could not locate evaluable criteria for criteria class org.opensaml.xml.security.keyinfo.KeyInfoCriteria
org.opensaml.xml.signature.SignatureValidator] Attempting to validate signature using key from supplied credential
org.opensaml.xml.signature.SignatureValidator] Creating XMLSignature object
org.opensaml.xml.signature.SignatureValidator] Validating signature with signature algorithm URI: http://www.w3.org/2000/09/xmldsig#rsa-sha1
org.opensaml.xml.signature.SignatureValidator] Validation credential key algorithm 'RSA', key instance class 'sun.security.rsa.RSAPublicKeyImpl'
org.opensaml.xml.signature.SignatureValidator] Signature validated with key from supplied credential
org.opensaml.xml.signature.impl.BaseSignatureTrustEngine] Signature validation using candidate credential was successful
org.opensaml.xml.signature.impl.BaseSignatureTrustEngine] Successfully verified signature using KeyInfo-derived credential
org.opensaml.xml.signature.impl.BaseSignatureTrustEngine] Attempting to establish trust of KeyInfo-derived credential
org.opensaml.xml.security.trust.ExplicitKeyTrustEvaluator] Failed to validate untrusted credential against trusted key
org.opensaml.xml.signature.impl.BaseSignatureTrustEngine] Failed to establish trust of KeyInfo-derived credential
org.opensaml.xml.signature.impl.BaseSignatureTrustEngine] Failed to verify signature and/or establish trust using any KeyInfo-derived credentials
org.opensaml.xml.signature.impl.ExplicitKeySignatureTrustEngine] Attempting to verify signature using trusted credentials
org.opensaml.xml.signature.SignatureValidator] Attempting to validate signature using key from supplied credential
org.opensaml.xml.signature.SignatureValidator] Creating XMLSignature object
org.opensaml.xml.signature.SignatureValidator] Validating signature with signature algorithm URI: http://www.w3.org/2000/09/xmldsig#rsa-sha1
org.opensaml.xml.signature.SignatureValidator] Validation credential key algorithm 'RSA', key instance class 'sun.security.rsa.RSAPublicKeyImpl'
org.apache.xml.security.signature.XMLSignature] Signature verification failed.
org.opensaml.xml.signature.SignatureValidator] Signature did not validate against the credential's key
org.opensaml.xml.signature.impl.BaseSignatureTrustEngine] Signature validation using candidate validation credential failed
org.opensaml.xml.validation.ValidationException: Signature did not validate against the credential's key
at org.opensaml.xml.signature.SignatureValidator.validate(SignatureValidator.java:79)

我的 securityContext 具有以下内容:

    <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:${MC_METADATA}</value>
</constructor-arg>
<property name="parserPool" ref="parserPool" />
</bean>
</constructor-arg>
<constructor-arg>
<map>
<entry key="${MC_ALIAS_1}">
<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
<property name="local" value="true" />
<property name="alias" value="${MC_ALIAS_1}" />
<property name="securityProfile" value="metaiop" />
<property name="requireArtifactResolveSigned" value="false" />
<property name="requireLogoutRequestSigned" value="false" />
<property name="requireLogoutResponseSigned" value="false" />
<property name="idpDiscoveryEnabled" value="false" />
</bean>
</entry>

</map>
</constructor-arg>
</bean>
</list>
</constructor-arg>
<property name="defaultExtendedMetadata">
<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
<property name="local" value="true" />
<property name="alias" value="${MC_ALIAS_1}" />
<property name="securityProfile" value="metaiop" />
<property name="requireArtifactResolveSigned" value="false" />
<property name="requireLogoutRequestSigned" value="false" />
<property name="requireLogoutResponseSigned" value="false" />
<property name="idpDiscoveryEnabled" value="false" />
</bean>
</property>
<property name="hostedSPName" value="${MC_ALIAS_1}" />
</bean>

传入的 SAML 包含 X509Certificate,我已将其复制到正在签名的元数据文件中。我还尝试将“metadataTrustCheck”添加为 false,但仍然出现相同的错误。通信通过 HTTPS 进行,我的测试服务器(接收 SAML)使用自签名证书。

关于可能遗漏/错误的任何想法?

最佳答案

通常,将证书添加到 IDP 的元数据中会使其受到 Spring SAML 的信任,因此您的方法是正确的。以下原因之一可能会导致您遇到的问题:

  • ${MC_ALIAS_1} 元数据可能是您的 IDP 元数据,但您目前正在将其作为 SP 元数据导入 - 您使用的是元数据生成器,还是这真的是您预先配置的 SP 元数据?
  • 您已将在 IDP 消息中找到的证书导入到您的 SP 元数据中,而需要将其导入 IDP 元数据才能获得信任

发布您收到的 SAML 消息和完整的配置 xml,而不仅仅是一个片段,将使故障排除更加容易。

关于java - Spring SAML 握手失败 - 无法根据可信 key 验证不受信任的凭证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26554673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com