【问题标题】:Security concerns regarding validation of a signed XML document有关验证已签名 XML 文档的安全问题
【发布时间】:2019-11-22 11:08:15
【问题描述】:

所以,我有这个签名的 XML 文档。在这种情况下,一个 SAML2 响应。我想验证这个 XML 文档是否未被以某种方式篡改过。如果我理解正确,这样做的方法是检查已签名文档的签名与签名时所用的公钥。

我知道如何检查签名,所以这不是问题。我的问题是关于检查签名时实际验证的内容。

我有一个示例 XML,其中包含用于签署 XML 的证书。如果我理解正确,我可以从 XML 中提取证书的公钥,并使用提取的密钥来验证 XML 没有被篡改。当我尝试时,这似乎工作正常。

我的问题是,这不只是验证 XML 是否针对其自己包含的证书进行验证?还是我错过了什么?如果有人用他们自己的签名响应替换了整个响应 XML 会怎样。我假设虚假响应可以根据自己包含的证书进行验证,就像合法响应会根据自己包含的证书进行验证一样?

您是否必须根据已知证书(例如安装在本地证书存储中)验证已签名的 XML,以确保响应未被篡改并且来自预期的来源?

【问题讨论】:

  • 证书中有私钥。发送的 xml 仅包含密钥的公共部分,因此有人无法篡改发送者消息。证书不应与实际消息一起发送,因此有人无法同时更改证书和消息。
  • @jdweng 我不确定为什么证书包含在签名的 Xml 中,但我确信有理由这样做。这不是我能从我身边控制的任何事情。
  • 只有当 xml 被信任时,证书才应该包含在签名的 xml 中。

标签: xml certificate saml-2.0


【解决方案1】:

我的问题是,这不只是验证 XML 是否根据自己包含的证书进行验证?

是的,你是对的。

您不需要根据已知证书验证签名的 XML 吗?

对于原始公钥和嵌入式证书情况,验证密钥是否可接受非常重要。理想情况下,您应该在检查签名之前接受(或拒绝)密钥。

对于原始公钥,“可接受”可能意味着“提前通过侧通道建立”。例如对方告诉了您他们将使用的公钥(或多个密钥),并且您确保看到其中一个。

对于证书,您可以使用预先共享策略,或者信任私有 CA 并检查该私有 CA 是否颁发了证书(假设您同样信任可以从该 CA 获得证书的每个人),或其他一些(或组合)基于特征的决策。

有关详细信息,请参阅SignedXml - Security considerations about the KeyInfo element SignedXml - Security considerations about the X509Data element

【讨论】:

  • 谢谢。我担心我误解了什么。我正在考虑的计划是从身份提供者那里获取签名证书并将其安装到证书存储中。然后我将使用安装的证书来验证签名的 Xml。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
相关资源
最近更新 更多