【问题标题】:Difference between signing a XML message using dsig:Signature and TLS Client Certificate使用 dsig:Signature 和 TLS 客户端证书签署 XML 消息的区别
【发布时间】:2010-11-11 10:45:29
【问题描述】:

我意识到这个问题可能有点含糊,或者我可能使用了不正确的术语,那是因为我正试图掌握这些东西 :)。

我需要使用 dsig:Signature 部分来实现 XML 消息的数字签名。我想我理解这个过程;我将使用私钥对其进行签名,这将向收件人保证是我发送了消息并且没有人篡改它。

这与实施 TLS 客户端证书不同,但目标是一样的,我说得对吗? (因为 TLS 是传输级别的,对吗?)实施客户端证书会更容易吗?一个比另一个好?

非常感谢您的回复,

马丁

更新 1:

我认为另一个区别是使用 TLS 客户端证书将加密整个消息,而使用数字签名,消息本身将是纯文本,包含签名部分。

【问题讨论】:

  • 它们不可互换。如果您想遵守 XML 安全标准,请执行一项。如果要连接到需要客户端身份验证的 SSL/TLS 服务器,请执行其他操作。

标签: xml security ssl digital-signature xml-signature


【解决方案1】:

您将消息级安全性与传输级安全性进行比较。虽然它们有相似之处,但它们有不同的目的。

使用 TLS 可以保护通信不被中间方看到和更改。服务器端的 X.509 证书保证发送给它的消息只能由具有此私钥的服务器读取,并且它发送的内容来自具有此私钥的服务器。这可能粗略地被认为是由服务器签名并使用 X.509 证书为服务器加密,尽管它实际上仅适用于 TLS 握手消息,而不适用于之后交换的应用程序数据。 (我忽略了这样一个事实,即无论是否有任何一方提供了证书,您都会获得通道的对称加密;重要的是至少让服务器使用证书,以便客户端知道它正在与什么通信,而不是与潜在的中间人沟通)。 当您向其中添加客户端证书时,客户端还会对其在握手期间交换的 TLS 消息进行签名。

当您同时使用客户端和服务器证书时,您可以(小心地)与消息级安全性进行类比,因为签名和加密的消息是用于建立 TLS 通道的 TLS 握手消息。

但是,消息级安全性存在很大差异(例如 XML-DSig 和 XML-Enc)。

首先,消息签名 (XML-DSig) 的功能之一是审计,这样您就可以记录所说的内容。它没有特别的时间限制。即使您已经记录了 TLS 数据包,这也很难做到。使用使用 DHE(Diffie-Hellman 临时模式)的 SSL/TLS 中的现代密码套件,即使您拥有服务器的私钥,如果您已记录所有数据包,您也不一定能破译通道(无需进一步了解 DHE机制)。

其次,在实现方面,XML-DSig 倾向于在应用程序级别完成,而 TLS 倾向于由服务器连接器完成。根据部署条件,差异可能会变得模糊,但 TLS 是关于与机器/容器通信,而不是与它们背后的应用程序通信。通常,TLS 证书将设置在 Java 容器或 WCF 级别,而用于 XML-DSig 的证书将由后面运行的 webapp/应用程序使用。那里可能有不同的人或程序负责。

(你也说得对,如果你使用没有 XML-Enc 的 XML-DSig,你就没有加密数据。)

【讨论】:

    【解决方案2】:

    到目前为止,您正在将苹果与橙子进行比较。

    可以通过多种方式对 XML 数据进行签名,例如使用 XMLDSig 标准和 X.509 证书(也可以在 XMLDSig 中使用其他密钥类型)。签名证明了文档的作者身份(当然,在某种程度上)。

    TLS 代表传输层安全性,用于在传输过程中加密(不签名)数据。它与 XML 无关。 TLS 也使用 X.509 证书,但您不能对 XMLSDig 和 TLS 使用相同的证书,因为证书需要有特定用途(密钥使用字段)。

    我建议你拿一些关于 PKI 的书(我总是推荐Rsa Security's Official Guide to Cryptography,因为它很简单)并仔细阅读。

    【讨论】:

    • 带有客户端证书的 TLS 可以有效地被视为让客户端“签署”通信。出示证书的各方通过签署握手消息有效地“签署”他们发送的数据:TLS 不仅仅是加密,它还涉及保护数据完整性和绑定到远程方的身份。
    • @Eugene 非常感谢您的回答和这本书,我会继续阅读。
    • @Bruno 谢谢!所以基本上带有客户端证书的 TLS 提供了 XML 签名所做的一切(完整性和身份),并且最重要的是它提供了加密(因此无法在线读取消息内容)?
    • 严格来说,TLS 通信的两方正在对他们发送的消息进行签名(和加密),但任何一方都无法向其他任何人证明这一点;签名不会保留在邮件中。此外,如果允许两种用法,则可以拥有可以进行签名和 TLS 的密钥。我想将它们分开会更常见; TLS 的密钥归服务器运营商所有,而不是 webapp 所有者(假设它们不同)。
    • @martijn_himself 不,TLS 不保证数据签名者的身份。它保证没有人在传输过程中更改数据,但不会提及原始签名者。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2019-10-25
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    相关资源
    最近更新 更多