【问题标题】:What to sign when signing a message with ws-security使用 ws-security 签署消息时要签署什么
【发布时间】:2011-02-23 21:34:00
【问题描述】:

我正在为我的网络服务添加安全性并选择签署TimestampToken

在阅读文档时,我发现了很多例子,他们在SOAP 消息的Body 上签名。

我的问题是:什么是最好的签名?

据我了解,如果Body 很大,签署Body 可能会导致性能问题。

谢谢。

【问题讨论】:

    标签: java .net security spring-security ws-security


    【解决方案1】:

    您绝对应该签署整个邮件正文。

    XMLDSIG 在 中定义的引用部分的摘要上执行。与 PKI 操作相比,通过大型主体运行 SHA1 之类的哈希算法所需的时间非常短。您不必担心性能。

    【讨论】:

    • 只签名时间戳有什么问题?
    • 签名时间戳只限制重放攻击的窗口。消息的其他部分仍然可以在不检测的情况下更改。此外,实际上只签署部分消息更难。
    • 这也是库的一个不幸限制,如果您选择签名涵盖的内容,则没有可用的查询机制允许您仅检索文档的该部分。樱桃采摘是一个非常非常深的兔子洞,这里又黑又冷。
    • 知道了,谢谢。但是如果是通过 HTTPS 通信,被篡改的可能性就很小了,不是吗?
    • 签名解决了另一个问题。 HTTPS 确实可以防止 MITM(中间人)攻击。如果有人只是修改消息并向您发出 HTTPS 调用,会发生什么?您必须使用 2-way SSL 才能获得签名的好处。
    【解决方案2】:

    如果客户端通过 HTTPS 向服务器发送 WS-Secure SOAP 请求,我的理解是,即使有人嗅到了流量,他们也无法将其解密以查看 SOAP 消息,因此无法修改它。所以我认为不需要双向 SSL。

    当通过 HTTPS 使用 WS-Secure 时,我们能否不让 HTTPS 负责加密,而只是使用 WS-Secure 进行身份验证(即对 SOAP 消息的某些部分进行时间戳或正文或其他签名)?

    【讨论】:

    • 您假设攻击者在中间,但大多数 SOAP 消息并非如此。任何人都可以通过 HTTPS 向您发送被篡改的消息。如果没有 2-way SSL,您将无法证明消息来自受信任的一方。
    • @ZZ Coder,但我用我的私钥签署了消息,然后服务器用我的公钥解密,所以它会知道它来自我(如果我签署整个正文而不仅仅是时间戳) ,对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多