SAML信任验证



我是一名SP,最近需要与IDP集成。在IDP的文档中,它会向我发送一个http post响应。在响应中,有ds:SignatureValue和ds:X509Certificate。有一个类似SAML的线程:为什么证书在Signature中?,线程只回答如何检查消息是否来自它所说的人。

1) ds:SignatureValue和ds:X509Certificate的含义是什么?

2) 如何确保响应来自我的IDP?我的意思是,如果黑客知道我的http发布地址,他们可以很容易地向我的应用程序发送类似的http发布请求。我发现http请求标头中有一个referer,验证来自我的IDP的请求是否安全?

3) IDP要求我发送SP公共签名证书,格式应该是DER编码的二进制X.509(*.CER)。如何创建公共公共签名证书?

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
 <ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
  <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
  <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
  <ds:Reference URI="#_2152811999472b94a0e9644dbc932cc3" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
   <ds:Transforms xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
     <ec:InclusiveNamespaces PrefixList="ds saml samlp xs" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
    </ds:Transform>
   </ds:Transforms>
   <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
   <ds:DigestValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">bW1Os7+WykqRt5h0mdv9o3ZF0JI=</ds:DigestValue>
  </ds:Reference>
 </ds:SignedInfo>
 <ds:SignatureValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
SignatureValue </ds:SignatureValue>
 <ds:KeyInfo>
  <ds:X509Data>
   <ds:X509Certificate>X509 certification</ds:X509Certificate>
  </ds:X509Data>
 </ds:KeyInfo>
</ds:Signature>
  1. 两者都是XML数字签名的元素。ds:SignatureValue元素包含SAML响应的实际签名,该签名是Base64编码的。ds:X509Certificate元素是签名证书(包含公共密钥和其他IdP的信息)。检查-XML有关详细信息,请参阅数字签名规范
  2. 您可能拥有来自其元数据的IdP证书。使用IdP证书,用于对传入的SAML响应进行签名并与进行比较从IdP接收CCD_ 3。如果这两个签名值匹配,那么您可以确保SAML响应确实是由您的IdP发送的。请检查此代码,了解如何使用OpenSAML实现验证SP从IdP发送的响应。(注意:这是我的repo,在这里我使用OpenSAML实现了SAML2.0)
  3. 要生成证书,可以使用各种工具和库。一个已知Java中的工具是Keytool。登录谷歌,你会发现很多这方面的教程

相关内容

  • 没有找到相关文章

最新更新