我有以下设置:
远程主机生成密钥对。他通过安全通道向我发送他的公钥。我可以100%保证公钥是从他那里发出的。然后他使用该密钥对来签署一些以JSON格式编码的数据。他通过两个参数向我发出POST Http请求:
a)JSON字符串 b)从JSON字符串生成的签名。
在我结束时,当我收到数据时,我使用他的公钥和他在HTTP POST中提供的签名进行验证。
此过程是否保证消息:
1)实际上是由发件人声称的主机发送的。 2)中间人攻击不会改变?
答案 0 :(得分:1)
此过程是否保证邮件实际上是由发件人声称的主机发送的?
从技术上讲,答案是肯定的。但这可能无关紧要,因为你的下一个问题的答案是:
此过程是否保证消息不会被人改变 在中间的攻击?
是的。
不受信任的主机可能会向您发送由您信任的来源签名的邮件。他们只需要获取或捕获消息和签名。
如果您不使用SSL,则无法保证与受信任服务器的连接。但只要您验证正在发送的邮件是由与您拥有的公钥对应的私钥签名的,那么邮件就会保持不变,并且您知道它来自受信任的来源。
所以最糟糕的情况是不受信任的主机会向您发送可信消息的副本。
这可能适用于您需要的内容,也可能不适用。如果您的消息是时间或顺序依赖,那么这可能是一个问题。如果他们将您的服务器置于特定状态,那也可能是一个问题。