【问题标题】:How to sign data served by API如何对 API 提供的数据进行签名
【发布时间】:2017-07-01 07:03:29
【问题描述】:

我正在通过私有 API 提供数据,并且我想对它们进行签名。我的用户有点偏执,并且自己保存数据。他们想确保他们保存的数据来自我,并且从那以后没有被任何人修改过。我不能只使用 https,因为 Https 只是证明服务器的身份。他们想要确保数据没有改变是不够的,即使我也不应该改变它们。

这就是我想要做的。

  1. 使用 sha1 或其他方法构建数据块的校验和。
  2. 使用私有自签名证书构建此校验和的数字签名。
  3. 通过 https 提供校验和、其签名和我的公钥。

我的问题是:

  • 这是正确的做法吗?
  • 我应该为 Comodo 或 Symantec 等权威机构购买证书吗?
  • 我可以使用我的 https 证书签署我的校验和吗?
  • 如果我从权威机构购买证书,到期后会发生什么?我的旧校验和签名不再有效吗?

【问题讨论】:

  • “你用你的私钥签署消息”如何保护数据不被你修改?
  • 它之所以有效,是因为它们存储了数据和校验和的副本。如果我们不能互相信任,我们将需要像区块链这样更激进的解决方案。你也可以引入第三部分,只允许他对数据进行签名。因此,未经他的同意,我将无法再生成签名数据。

标签: ssl certificate digital-signature


【解决方案1】:
  1. 使用 sha1 或其他方法构建数据块的校验和。

  2. 使用私有自签名证书构建此校验和的数字签名。

您应该在消息上进行数字签名,而不是在校验和上(数字签名过程本身涉及消息的哈希,但您不必注意这一点)

您需要一个私钥和一个证书。您可以构建自己的自签名证书或向证书颁发机构 (CA) 申请。

  1. 通过 https 提供校验和、其签名和我的公钥。

您需要发送签名,而不是校验和。真的不需要https来发送签名(但推荐),因为数字签名可以保护消息的内容并识别签名者

客户端应将您的签名证书的根证书包含在他的信任库中,以便能够验证签名。您可以离线提供或通过 https 提供。

我应该为 Comodo 或 Symantec 等权威机构购买证书吗?

客户端必须信任您的根证书,包括它在他的信任库中(如上所述)。受信任的 CA 的优点是它通常默认存在于客户端信任库中的根证书,您不需要导入它。但是如果你生成了一个自签名证书,并且你将公共部分提供给客户,他可以手动导入它。

我可以使用我的 https 证书签署我的校验和吗?

不,https 证书必须用于 SSL 连接并且具有特定的密钥用法。根据您的客户使用的软件,可能会拒绝签名

如果我从权威机构购买证书,到期后会发生什么?我的旧校验和签名不再有效吗?

默认情况下,在证书过期日期之后执行的数字签名验证将失败。如果您的客户想要这样做,那么客户或您必须使用时间戳(由第三方时间戳颁发机构颁发)来保护签名。当时间戳的证书接近过期时,可以添加其他时间戳

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2017-12-05
    • 1970-01-01
    相关资源
    最近更新 更多