我意识到这个问题可能有点模糊,或者我可能使用了不正确的术语,那是因为我试图掌握这些东西:)。
我需要使用dsig:Signature部分实现XML消息的数字签名。我想我理解这个过程;我将使用私钥对其进行签名,这将向收件人保证发送消息和的是我没有人篡改过它。
我是否正确,这与实施TLS客户端证书不同,但目标是相同的? (因为TLS是传输级别,对吧?)实现客户端证书会更容易吗?一个比另一个好吗?
非常感谢您的回复,
马亭
更新1:
我认为另一个区别是使用TLS客户端证书将整个邮件加密,而使用数字签名时,邮件本身将是纯文本,包含签名部分。
答案 0 :(得分:5)
您正在将消息级安全性与传输级安全性进行比较。虽然它们有相似之处,但它们有不同的用途。
使用TLS可以防止中间人看到和更改通信。服务器端的X.509证书保证发送给它的消息只能由服务器使用此私钥读取,并且它发送的内容来自具有此私钥的服务器。这可能松散被视为服务器签名并使用X.509证书加密服务器,尽管它实际上仅适用于TLS握手消息,而不是之后交换的应用程序数据。 (我忽略了无论如何都要对通道进行对称加密,无论是否有任何一方出示证书;至少让服务器使用证书以便客户端知道它与之通信的内容而不是与潜在的中间人交流。 向此添加客户端证书时,客户端还会在握手期间签署它已交换的TLS消息。
当您同时使用客户端和服务器证书时,您可以(小心地)使用消息级安全性进行类比,因为签名和加密的消息是用于建立TLS通道的TLS握手消息。 / p>
但是,消息级安全性存在很大差异(例如XML-DSig和XML-Enc)。
首先,消息签名(XML-DSig)的一个功能是审核,以便您可以记录所说的内容。它没有特别的时间限制。即使你已经记录了TLS数据包,这也很难做到。使用SSL / TLS中的现代密码套件使用DHE(Diffie-Hellman短暂模式),即使您拥有服务器的私钥,如果您已记录其所有数据包,也无法解密该频道(无需了解DHE机构)。
其次,就实现而言,XML-DSig倾向于在应用程序级别完成,而TLS倾向于由服务器连接器完成。根据部署条件,差异可能会模糊,但TLS是与机器/容器而不是它们背后的应用程序进行通信。通常,TLS证书将在Java容器或WCF级别上设置,而用于XML-DSig的证书将由后面运行的webapp /应用程序使用。那里可能有不同的人或程序。
(你也是对的,如果你在没有XML-Enc的情况下使用XML-DSig,你就不会加密数据。)
答案 1 :(得分:1)
到目前为止,您正在将苹果与橙子进行比较。
XML数据可以通过多种方式进行签名,例如使用XMLDSig标准和X.509证书(也可以使用XMLDSig中的其他密钥类型)。签名证明了文档的作者身份(当然,在某种程度上)。
TLS代表传输层安全性,用于在传输过程中加密(不签名)数据。它与XML无关。 TLS也使用X.509证书,但您不能对XMLSDig和TLS使用相同的证书,因为证书需要具有特定目的(密钥用法字段)。
我建议您阅读一些关于PKI的书(我总是建议Rsa Security's Official Guide to Cryptography因为它简单)并仔细阅读。