SAML 信任验证
SAML trust verfication
我是一名 SP,最近需要与 IDP 集成。在 IDP 的文档中,它会向我发送一个 http post 响应。在响应中,有 ds:SignatureValue 和 ds:X509Certificate。有这样一个帖子SAML: Why is the certificate within the Signature?,帖子只回答如何检查消息是否来自它所说的人。
1) ds:SignatureValue和ds:X509Certificate是什么意思?
2) 如何确保响应来自我的 IDP?我的意思是,如果黑客知道我的 http post 地址,他们可以轻松地向我的应用程序发送类似的 http post 请求。我发现 http 请求中有一个 referer header,验证来自我的 IDP 的请求是否安全?
3) IDP 要求我发送 SP public 签名证书,格式应该是 DER 编码的二进制 X.509 (*.CER)。如何创建 public public 签名证书?
<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>
- 两者都是XML数字签名的元素。
ds:SignatureValue
元素包含 SAML 响应的实际签名,它是 Base64 编码的。
ds:X509Certificate
元素是签名证书(包含 public
密钥和其他 IdP 的信息),这是 Base64 编码的。检查 - XML
数字签名规范 了解更多信息。
- 您可能拥有来自其元数据的 IdP 证书。使用国内流离失所者
用于签署传入 SAML 响应并与之进行比较的证书
从 IdP 收到
ds:SignatureValue
。如果这两个签名值匹配,那么您可以确信您的 IdP 确实发送了 SAML 响应。检查此 code 以了解如何验证 SP 使用 OpenSAML 实现从 IdP 发送的响应。 (注意:这是我的存储库,我在其中使用 OpenSAML 实现了 SAML2.0 实现)。
- 要生成证书,可以使用各种工具和库。一个已知的
Java 中的工具是 Keytool。签到Google,你会发现很多
关于此的教程。
我是一名 SP,最近需要与 IDP 集成。在 IDP 的文档中,它会向我发送一个 http post 响应。在响应中,有 ds:SignatureValue 和 ds:X509Certificate。有这样一个帖子SAML: Why is the certificate within the Signature?,帖子只回答如何检查消息是否来自它所说的人。
1) ds:SignatureValue和ds:X509Certificate是什么意思?
2) 如何确保响应来自我的 IDP?我的意思是,如果黑客知道我的 http post 地址,他们可以轻松地向我的应用程序发送类似的 http post 请求。我发现 http 请求中有一个 referer header,验证来自我的 IDP 的请求是否安全?
3) IDP 要求我发送 SP public 签名证书,格式应该是 DER 编码的二进制 X.509 (*.CER)。如何创建 public public 签名证书?
<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>
- 两者都是XML数字签名的元素。
ds:SignatureValue
元素包含 SAML 响应的实际签名,它是 Base64 编码的。ds:X509Certificate
元素是签名证书(包含 public 密钥和其他 IdP 的信息),这是 Base64 编码的。检查 - XML 数字签名规范 了解更多信息。 - 您可能拥有来自其元数据的 IdP 证书。使用国内流离失所者
用于签署传入 SAML 响应并与之进行比较的证书
从 IdP 收到
ds:SignatureValue
。如果这两个签名值匹配,那么您可以确信您的 IdP 确实发送了 SAML 响应。检查此 code 以了解如何验证 SP 使用 OpenSAML 实现从 IdP 发送的响应。 (注意:这是我的存储库,我在其中使用 OpenSAML 实现了 SAML2.0 实现)。 - 要生成证书,可以使用各种工具和库。一个已知的 Java 中的工具是 Keytool。签到Google,你会发现很多 关于此的教程。