1

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

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

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

非常感谢您的回复,

马汀

更新1:

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

4

2 回答 2

5

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

使用 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,你就没有加密数据。)

于 2010-11-11T13:59:10.760 回答
1

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

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

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

我建议你拿一些关于 PKI 的书(我总是推荐Rsa Security 的官方密码学指南,因为它很简单)并仔细阅读。

于 2010-11-11T12:31:39.443 回答