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

Spring SAML 配置正在破坏其他 http 连接

欧阳晗日
2023-03-14

我正在使用Spring SAML在我的应用程序中实现单点登录。Evreything是集成的,从SSO的角度可以正常工作。我的应用程序的另一个服务也通过安讯士使用HTTP客户端发布,开始失败,并出现以下错误

{ http://XML . Apache . org/axis/} stack trace:javax . net . ssl . SSL peer unverified异常:SSL对等方未能通过名称为null的主机名验证

我已经研究了回答提供的链接Spring SecuritySAML HTTPS到另一个页面,并遵循相同的,但无济于事。

下面是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中导入了其他服务的证书。

在这个问题上的任何帮助都将受到欢迎

共有2个答案

从智志
2023-03-14

问题出在PKIXX509CreentialTrustEnginecheck Names()函数中,我们只检查null而不是"null or空"受托人名称集合。即使我们在TLSPromatcolSocketFactorygetPKIXResolver()方法中将受托人名称的值传递为null以创建StaticPKIXValidationInformatonResolver,此类的构造函数将受托人名称集合重新初始化为空集合。
将行从
if(受托人名称==null)更改为if(受托人名称==null||trustedNames.isEmpty())对我来说是个问题。

顾池暝
2023-03-14

我想这可能就是你想要的:来源

您正在使用bean TLSProtocolConfigurer,它更改HTTP客户端中HTTPS协议的可信证书和主机名验证。您可以通过删除此 Bean 将 HTTP 客户端的行为恢复为默认值。然后,您需要确保从中加载元数据的实体 (https://idp.ssocircle.com/idp-meta.xml) 使用的证书在您的 cacert 中受信任,或者使用不带 https 的终结点 (http://idp.ssocircle.com/idp-meta.xml)。

或者,您可以通过将属性sslHostnameVeration设置为beanTLSProcolConfigrer上的lowAll来禁用主机名验证。您还需要确保samlKeystore.jks中包含https://www.somepage.com的HTTPS证书(或其CA)(请参阅Spring SAML手册)。

您可以在Spring SAML手册的“基于HTTP的元数据提供程序与SSL”一章中找到有关<code>TLSProtocolConfigurer</code>bean的更多详细信息。

 类似资料:
  • 编辑1: 我目前从一个Main类调用它,如下所示: } 原文: 解释后代码如下: 我有一个带有JavaConfig的Spring应用程序,称之为主应用程序,它从库中导入另一个Spring JavaConfig类。这个导入的JavaConfig应该用一个方面包装在主应用程序中创建的任何数据源,这个方面有一个自动连接的LogDelegator。 只要主应用程序只包含一个数据源,一切都正常。但是,当我向

  • 问题内容: 我听过关于此主题的不同回答,那么销毁PHP会话的肯定方法是什么? 在最简单的情况下,这是否足以真正终止用户与服务器之间的会话? 问题答案: 要销毁会话,您应该采取以下步骤: 删除会话数据 使会话ID无效 为此,我将使用以下代码: 为了确保会话ID无效,您应该只允许脚本启动的会话ID。因此,设置一个标志并检查它是否被设置: 此外,您可以使用此时间戳定期交换会话ID,以缩短其寿命:

  • 问题内容: Hibernate配置文件(.hbm.xml)的理想位置是 但我想将这些配置设置放在其他位置,例如 我怎样才能做到这一点? 如果我将配置文件放在该位置,并且启动了Tomcat,则在加载该配置时会出现错误提示 找不到hibernate.cfg.xml 问题答案: 要配置文件的位置,请使用而不是在创建时。 要配置文件的位置,请使用。 也可以看看: Java文档

  • 对于Oracle池连接,我使用,但这些连接似乎在数据库中保持活动状态。今天我在连接到Oracle数据库时遇到了一个错误: ORA-12516:TNS:侦听器找不到具有匹配协议栈的可用处理程序 另外,我在dao级别使用jdk7 try-with-resources语法进行连接: 弄不清真正的问题在哪里。我应该使用c3p0而不是OracleDataSource吗?ojdbc7中是否有bug或我的代码中

  • ssh 公私钥登录配置 第一步,在客户端生成公钥 ssh-keygen -t rsa #生成的公钥匙在 ~/.ssh/ 目录下 第二步,把公钥上传到服务器端,登录服务器追加公钥到 authorized_keys 文件 简单版 ssh-copy-id -i ~/.ssh/id_rsa.pub username@ip 复杂版 scp id_rsa.pub root@ip地址:文件保存路径 ssh

  • 我有一个使用spring security和mvc框架开发的门户应用程序。此门户应用程序连接到IDP(使用Spring security和Spring saml开发)进行身份验证。如果用户身份验证成功,用户将被导航到主页,其中为外部应用程序提供了多个链接……当用户单击应用程序链接时,用户应成功导航到相应的应用程序,而无需质疑登录页面。 其他应用程序是使用strut和Spring Security开