我正在使用Spring SAML在我的应用程序中实现单点登录。从SSO的角度来看,Evreything已经集成并正常运行。 我的应用程序的另一项服务也通过Axis使用HTTP客户端发布失败,并出现以下错误
{http://xml.apache.org/axis/} stackTrace:javax.net.ssl.SSLPeerUnverifiedException:SSL对等名称的主机名验证失败:null
我已经查看了提供链接的答案 Spring Security SAML + HTTPS to another page并遵循同样但无济于事。
以下是TLSProtocolSocketFactory
的配置 <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="org.apache.commons.httpclient.protocol.Protocol"/>
<property name="targetMethod" value="registerProtocol"/>
<property name="arguments">
<list>
<value>https</value>
<bean class="org.apache.commons.httpclient.protocol.Protocol">
<constructor-arg value="https"/>
<constructor-arg>
<bean class="org.springframework.security.saml.trust.httpclient.TLSProtocolSocketFactory">
<constructor-arg ref="keyManager"/>
<constructor-arg><null/></constructor-arg>
<constructor-arg value="allowAll"/>
</bean>
</constructor-arg>
<constructor-arg value="443"/>
</bean>
</list>
</property>
</bean>
我也在samlKeystore.jks中导入了其他服务的证书。
该问题的任何帮助都是apreciated
答案 0 :(得分:1)
我认为这可能是您正在寻找的内容:Source
您正在使用bean TLSProtocolConfigurer
更改HTTP客户端中HTTPS协议的可信证书和主机名验证。您可以通过删除此bean将HTTP客户端的行为恢复为默认值。然后,您需要确保加载元数据的实体使用的证书(https://idp.ssocircle.com/idp-meta.xml)在您的cacerts中受信任,或者使用没有https(http://idp.ssocircle.com/idp-meta.xml)的端点。
或者,您可以通过在bean sslHostnameVerification
上将属性allowAll
设置为TLSProtocolConfigurer
来禁用主机名验证。您还需要确保https://www.somepage.com(或其CA)的HTTPS证书包含在samlKeystore.jks中(请参阅Spring SAML manual)。
您可以在Spring SAML manual, chapter HTTP-based metadata provider with SSL中找到有关TLSProtocolConfigurer
bean的更多详细信息。
答案 1 :(得分:0)
问题出在checkNames()
PKIXX509CredentialTrustEngine
的{{1}}函数中,我们仅针对trustedNames
而不是null
检查"null or Empty"
集合。
< br />即使我们在TLSProtocolSocketFactory
的{{1}}方法中将 trustedNames 的值作为 null 传递给{{1} }},此类的构造函数将getPKIXResolver()
集合重新初始化为空集合。
将行从StaticPKIXValidationInformatonResolver
更改为
{{1我解决了这个问题。