我最近不得不使用两个大型实体实现 XML 消息传递,这需要我们提供 SSL 客户端证书以及使用不同的签名证书对 SOAP 消息体进行签名。除了冗余之外,使用不同证书对消息正文进行签名是否提供任何额外的保护?
编辑以澄清问题并指出我与 EJP 之间长达数年的误解。
除了使用带有相互身份验证(客户端证书)的 SSL 之外,对消息进行签名的价值在于您获得了不可否认性。但是,无论是使用客户端证书对消息进行签名还是使用不同的签名证书,您都会知道。
我最近不得不使用两个大型实体实现 XML 消息传递,这需要我们提供 SSL 客户端证书以及使用不同的签名证书对 SOAP 消息体进行签名。除了冗余之外,使用不同证书对消息正文进行签名是否提供任何额外的保护?
编辑以澄清问题并指出我与 EJP 之间长达数年的误解。
除了使用带有相互身份验证(客户端证书)的 SSL 之外,对消息进行签名的价值在于您获得了不可否认性。但是,无论是使用客户端证书对消息进行签名还是使用不同的签名证书,您都会知道。
签署该消息提供了对交易的法律强制不可否认性。您有证据证明该客户并且只有该客户可以发送该消息,并且您可以在法庭上重复签名验证以证明。SSL 在技术上以较低的级别为您提供相同的东西,但是您没有任何方法可以获取签名,因此您无法在法庭上出示它:您只能手握证据,而不是实际的数字签名,这是一个合法的签名,因此是表面证据。
我不知道我会把它称为“保护”,但这是两件不同的事情。SSL 证书用于验证您的身份以用于加密/传输目的。
SOAP 签名允许最终用户验证 XML 自创建者(您)签名后未被更改。
使用传输层安全性,您的安全性在传输层结束。通过签署 SOAP 消息,您可以为应用层提供端到端的身份验证。
如果没有 SSL 客户端证书,互联网上的任何人都可以与您的后端服务器通信。这会增加您的攻击面。
如果没有应用层安全,想象一下如果攻击者控制了 SSL 负载均衡器/反向代理会发生什么。(他们可以将任何他们想要的 SOAP 消息发送到您的后端服务器而无需身份验证?!)
所以看起来他们都提供了一些价值,是的。
我要问的另一个问题是,如何保护密钥(即 SSL 客户端证书和 SOAP 签名证书)?如果攻击者获得对两个密钥的控制权是微不足道的,那将减少这种方法的回报。
通过使用与验证连接不同的密钥来签署 SOAP 消息,您还可以在如何执行 PKI 方面提供更大的灵活性。例如,您的网络管理团队可能希望为每个组织颁发一个 SSL 客户端证书,但应用程序团队可能希望该组织中的每个实体拥有一个 SOAP 消息签名证书。