8

我有一位客户正在发送安全密钥。他们使用的加密是三重DES。他们发送的每个断言都有一个签名值,需要对其进行验证以赋予他们必要的特权。你能给我一个示例代码吗?

4

2 回答 2

14

加密和签名是两种不同的动物。三重 DES 是一种对称密钥方法(加密和解密使用相同的密钥)。另一方面,数字签名使用非对称密钥(私钥/公钥对),其中签名是使用私钥计算的,并且可以使用公钥进行验证。因此,如果您的客户希望在他们发送给您的 XML 中包含签名,那么他们需要向您提供他们的公钥。

对于加密,SAML 中的典型做法是使用 XMLEncryption,它定义了一种 XML 格式,用于在 SAML 消息中包含加密密钥信息和加密数据。由于静态对称密钥的交换是有问题的——如果它被拦截,拦截器可以加密和解密任何消息——可以做的是使用为每条消息重新生成的动态对称密钥,使用加密消息密钥,然后使用私有/公共加密密钥对的公钥对该密钥进行加密,并将其与消息一起发送。加密的对称密钥只能使用用于加密它的密钥对的私有一半来解密。

因此,从密钥的角度来看,这里最显着的区别是,对于签名,客户持有私钥并且必须与您共享公钥,而对于加密,您持有私钥并且必须与客户共享公钥.

于 2010-02-10T20:41:36.240 回答
7

如果您想验证 SAML 断言或任何可签名 XML 对象上的签名,OpenSAML WIKI 有更多信息:

https://wiki.shibboleth.net/confluence/plugins/viewsource/viewpagesrc.action?pageId=3277047

您可以查找“签名验证示例”。

这篇博文也有一个例子:

https://blog.samlsecurity.com/2012/11/verifying-signatures-with-opensaml.html

要获得用于验证的“凭据”,请参见此处: https ://blog.samlsecurity.com/2011/03/getting-credentials-in-opensaml.html

有关如何将 XML 解组为 Open SAML 对象的信息,请参见此处: https ://wiki.shibboleth.net/confluence/display/OpenSAML/OSTwoUsrManJavaCreateFromXML

于 2013-01-02T19:24:45.767 回答