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

Spring Security SAML-HTTPS连接

庄文栋
2023-03-14

关于Spring Security SAML扩展v1如何处理SSL(HTTPS)连接,我有几个问题。0版本。

我正在使用扩展来开发SP。我使用的远程IDP有一个HTTPS URL。我在Tomcat使用的JRE cacerts密钥库中拥有该SSL证书的根和颁发证书。IDP的元数据通过HTTPMetadataProvider很好地加载。在我的SP元数据的ExtendedMetadata中,我有:

<property name="securityProfile" value="metaiop"/>
<property name="sslSecurityProfile" value="pkix"/>

当我点击我的SP时,我会被重定向到我的IDP,我会提供我的凭据。然后IDP将我发送回我的SP。但我在这里得到一个错误error org。springframework。安全山姆。相信MetadataCredentialResolver PKIX路径为不受信任的凭据构建失败

日志显示,这是在构建SOAP消息之后发生的。我想我的SP正在尝试连接到我的IDP以解决工件问题。

在Spring SAML留档的第7.2.3节中,它说默认情况下HTTPS元数据连接将使用Java的密钥库。如上所述,我已经处理好了。但是在第8.1.4秒中,它说直接SSL/TLS连接(与HTTP-artiact绑定一起使用)需要验证服务器提供的公钥,并且应该检索证书并将其作为通常的公钥导入密钥库。我假设这意味着在JKSKeyManager中定义的SP的密钥库。当我将SSL证书从我的IDP导入SP密钥库时,错误消失了,一切正常。

第一个问题,这是正确的处理方式吗?HTTPS上的工件解析能否不使用JRE的cacerts密钥库?

第二个问题如果我不将证书导入SP密钥库并将sslSecurityProfile值更改为metaiop,我仍然会在同一时间收到错误,但它显示SSL对等方未能对name: null进行主机名验证,即使我将sslHostname验证设置为lowAll。为什么会发生这种情况?

根据我对MetaIOP配置文件的理解,它在IDP的元数据中查找证书。由于该证书与SSL证书不同,因此会失败。对的

共有1个答案

包承望
2023-03-14

是的,工件解析期间打开的HTTPS连接仅使用samlKeystore中的密钥。jks(或另一个配置的KeyManager)用于信任解析,cacerts被忽略。

将SSL上的安全配置文件更改为MetaIOP意味着您必须导入HTTPSendpoint使用的确切证书(导入密钥库或IDP的元数据-它会检查两者)。系统也不会验证证书的有效性(或任何其他由标准PKIX算法验证的值)。

使用PKIX,您可以导入证书颁发机构的证书,系统将自动信任它颁发的证书。

我相信系统在主机名验证上失败的原因是由于Java8中的一些变化。Spring SAML将从X509TrustManager抛出证书异常-向JDK指示服务器不受信任,但JDK不会进一步报告此异常,而是返回一个空SSL会话-稍后在主机名验证时失败,因为它的主机名为空。

检查SSLSession是否正确打开的主机名验证逻辑位于OpenSAML(TLSProtocolSocketFactory)中,可能会在更高版本中进行修改

所以这个异常有点误导,但除此之外系统行为是正确的。

 类似资料:
  • 问题内容: 我正在尝试验证目标是否公开了https Web服务。我有通过HTTP连接的代码,但不确定如何通过HTTPS连接。我已经阅读过您使用SSL,但我也阅读过它不支持证书错误。我得到的代码来自python docs: 有谁知道如何连接到HTTPS? 我已经尝试过HTTPSConenction,但是它以错误代码响应,声称httplib没有属性HTTPSConnection。我也没有socket.

  • 问题内容: 我正在做一个https帖子,但是却得到ssl异常的一个例外,不受信任的服务器证书。如果我做正常的HTTP,它工作正常。我是否必须以某种方式接受服务器证书? 问题答案: 我正在猜测,但是如果你想进行实际的握手,则必须让android知道你的证书。如果你只想接受任何内容,请使用以下伪代码通过Apache HTTP Client获得所需的内容: CustomSSLSocketFactory:

  • 问题内容: 我需要测试正在部署到HTTPS终结点上部署的预发布环境的Web服务。不幸的是,SoapUI 异常失败。我同时使用了4.6.4版本和非常新的5.0版本。 信封: 终结点是https,startcom证书,网络使用代理(但是同一问题,没有代理使用不同的网络) 我已经花了很多时间,也许是一天都在搜寻解决方案。特别是此链接看起来很有希望:https : //forum.soapui.org/v

  • 我用Java编写了一个访问URL的小代码。该代码适用于HTTP连接,但不适用于HTTPS(错误粘贴在下面) 如有任何帮助,我们将不胜感激。 代码: 错误: 异常线程"main"javax.net.ssl.SSLHandshake异常:sun.security.validator.验证器异常:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathB

  • 问题内容: 我有一个使用socket.IO的node.js应用程序。它可以在http上正常工作,但是当尝试通过https连接到套接字时,没有任何反应。 这是代码的一部分: 和功能: 客户端连接如下: 正如我说的,在http上一切正常,但是在https上连接会给我“连接被中断”。我究竟做错了什么? 问题答案: 您不能像服务器那样初始化服务器。您必须启动一个单独的https服务器,然后将socket.

  • org.springframework.web.client.ResourceAccessException:POST请求“https://api.twitter.com/oauth/request_token”时的I/O错误:连接超时;嵌套异常java.net.SocketException:连接超时org.springframework.web.client.RestTemplate.do执行