我有一位客户正在发送安全密钥。他们使用的加密是三重DES。他们发送的每个断言都有一个签名值,需要对其进行验证才能获得必要的权限。你能给我一个代码来做这个吗?
答案 0 :(得分:14)
加密和签名是两种不同的动物。三重DES是对称密钥方法(用于加密和解密的相同密钥)。另一方面,数字签名使用非对称密钥(私钥/公钥对),其中签名是使用私钥计算的,并且可以使用公钥进行验证。因此,如果您的客户希望在他们发送给您的XML中包含签名,那么他们需要向您提供他们的公钥。
对于加密,SAML中的典型做法是使用XMLEncryption,它定义了一种XML格式,用于在SAML消息中包含加密密钥信息和加密数据。由于交换静态对称密钥是有问题的 - 如果它被截获,拦截器可以加密和解密任何消息 - 可以做的是使用为每条消息重新生成的动态对称密钥,使用加密消息密钥,然后使用私有/公共加密密钥对的公钥加密该密钥,并将其与消息一起发送。加密的对称密钥只能使用用于加密它的密钥对的私有一半来解密。
因此,从关键的角度来看,最重要的区别是,对于签名,客户持有私钥并且必须与您共享公钥,而对于加密,您持有私钥并且必须共享公钥与客户合作。
答案 1 :(得分:6)
如果要验证SAML断言或任何可签名XML对象上的签名,OpenSAML WIKI会提供更多信息:
https://wiki.shibboleth.net/confluence/plugins/viewsource/viewpagesrc.action?pageId=3277047
您可以查找“签名验证示例”。
此博客文章也有一个例子:
http://mylifewithjava.blogspot.com/2012/11/verifying-signatures-with-opensaml.html
要获得验证的'凭证',请参阅此处: http://mylifewithjava.blogspot.com/2011/03/getting-credentials-in-opensaml.html
有关如何将xml解组为Open SAML对象的信息,请参阅此处: https://wiki.shibboleth.net/confluence/display/OpenSAML/OSTwoUsrManJavaCreateFromXML
谢谢, 约杰什