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

我需要使用DSIG:签名部分实现XML消息的数字签名。我想我理解这个过程;我将使用一个私钥签名,这将向收件人保证是我发送消息的是我 没有人篡改它。

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

非常感谢您的答复,

martijn

更新1:

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

有帮助吗?

解决方案

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

使用TLS可以保护通信免于被中间方看到和改变。服务器端上的X.509证书保证,发送给它的消息只能由服务器使用此私钥读取,并且它发送的内容来自服务器,使用此私钥。可以 松散 被视为由服务器签名并使用X.509证书为服务器进行加密,尽管它确实仅适用于TLS握手消息,而不是此后交换的应用程序数据。 (无论如何,我都忽略了您对频道的对称加密的事实,无论是否有任何方向证书呈现;与潜在的中间人交流)。当您对此添加客户端证书时,客户端还签署了握手期间交换的TLS消息。

当您同时使用客户端和服务器证书时,您可以(仔细)使用消息级安全性绘制类比,因为签名和加密的消息是用于建立TLS频道的TLS握手消息。

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

首先,消息签名的功能之一(XML-DSIG)正在审核,因此您可以保留所讲内容的记录。它不是特别限制的。即使您录制了TLS数据包,也很难做到这一点。使用使用DHE的SSL/TLS中的现代密码套件(Diffie-Hellman临时模式),即使您拥有服务器的私钥,也不一定会解密该频道的所有数据包(在没有更多了解DHE的情况下,机制)。

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

(您也是正确的,如果您使用XML-DSIG没有XML-enc,则不会加密数据。)

其他提示

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

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

TLS代表运输层安全性,用于 加密 (不签名)传输中的数据。它与XML无关。 TLS也使用X.509证书,但是您不能为XMLSDIG使用相同的证书,而TLS则导致证书需要具有特定目的(关键用法字段)。

我建议您在PKI上读一些书(我总是建议您 RSA安全的官方密码指南 因为它的简单性)并专注于阅读。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top