繁体   English   中英

澄清RSA SAML响应

[英]Clarify RSA SAML Response

我不太清楚如何检查和解析SAML 2.0中此部分响应信封传递的值:

<dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
    <dsig:SignedInfo><dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#WithComments"/><dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
        <dsig:Reference URI="#ID_ce8c62aa-08e4-4a21-a89a-af4fbd7a9f50">
            <dsig:Transforms><dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
            <dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            </dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <dsig:DigestValue>ImUVGjTf7WTCmboAbAtjx7WKQhI=</dsig:DigestValue>
        </dsig:Reference>
    </dsig:SignedInfo>
    <dsig:SignatureValue>CDk+O/3PPh57l84pjFW0xwiPYJ+yinYJciBowT3nkPaAXeMYCH1AopZl7ZP+swPiK+oYuW9STPSlJVuEuDao5VbSU2WlQR7Ed9nZMt9PNY19/eKtkAqbMk01ZY8YH6OyTQm17w6IzNRbY4sJcHSRz9eDUsTzAYVhV9PEBgT1ouZsghklMCe0iYBjK5LmRS88jGmCN5sZ5+L8+KimTCakWSJ8CLntEAFx1SBL50Or4e8j6nHiW7g==</dsig:SignatureValue>
    <dsig:KeyInfo>
        <dsig:KeyValue>
            <dsig:RSAKeyValue>
                <dsig:Modulus>4Gvzu2dCYGhdWr9Er/WtgbWRqAR798IPCfAubx8NeBKG/X6P7sM91zbD2LEH4tJS2vkMCnQFidoLdeh1SHp7+GLHnVsgTcj6NPOit0EOHz10tdRmFMwoRCh5hcMFEisFUgSdaS8bO2wSXBmLENfLDUOSYKKLP0JGtTqnAZ0A99UNrVWKemx/EnHopH+Q7M+zmbj8VWFVlCK6rDfXJLUBr+kGSlw==</dsig:Modulus>
                <dsig:Exponent>AQAB</dsig:Exponent>
            </dsig:RSAKeyValue>
        </dsig:KeyValue>
    </dsig:KeyInfo>
</dsig:Signature>

因此,基本上RSAKeyValue应该包含“公钥”以读取DigestedValue吗? 那么, Signature值的目的是什么?

我想实现一个Java类来解密(我有正确的密钥库并通过传递它来做...)。 请指出正确的方向。

如注释中所写,它是XML签名 通过签名,您可以验证XML是否已由受信任方签名并且元素没有被修改。 因此,您可以相信SAML响应确实来自您可以信任的IdP。 它不是加密。

我想实现一个Java类来解密

正如我所说的,没有什么要解密的,您只能验证签名的XML元素的完整性。

为此,我建议您使用现成的库来处理XML(实现所有规范化选项等会很无聊。)。 我建议您使用现成的库(OpenSAML,spring-security-saml2)来验证签名。

如果您想自己做,只需阅读搜索/关于 XML签名的信息。

您所拥有的:

<dsig:Reference URI="#ID_ce8c62aa-08e4-4a21-a89a-af4fbd7a9f50">

XML中必须具有ID属性为"#ID_ce8c62aa-08e4-4a21-a89a-af4fbd7a9f50"的元素,并且签名可确保所"#ID_ce8c62aa-08e4-4a21-a89a-af4fbd7a9f50" XML元素的完整性。 确保签名引用了整个SAML消息或声明元素。 否则,您的代码将容易受到签名注入攻击 这就是为什么我建议您为此使用成熟的库。

<dsig:DigestValue>ImUVGjTf7WTCmboAbAtjx7WKQhI=</dsig:DigestValue>

RSA无法处理任意(任何)长度的消息,因此将创建消息摘要(sha-1哈希)并进行签名。 DigestValue是从已签名的XML元素及其内容创建的哈希值。 (如何创建要散列的全部内容取决于CanonicalizationMethod,Transforms,DigestMethod中指定的参数,您可以在第一个链接中阅读该参数)

<dsig:SignatureValue>

这是DigestValue的RSA / PKCS1.5签名

我希望可以澄清您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM