Ssl 如何对API提供的数据进行签名

Ssl 如何对API提供的数据进行签名,ssl,certificate,digital-signature,Ssl,Certificate,Digital Signature,我通过一个私有API提供数据,我想对它们进行签名。我的用户有点偏执,他们自己保存数据。他们希望确保他们保存的数据来自我,并且从那以后没有被任何人修改过。我不能只使用https,因为https只是证明服务器的身份。这还不够,他们想确保数据没有改变,即使是我也不能改变它们 这是我想做的 使用sha1或其他方法构建数据通道的校验和 使用私人自签名证书生成此校验和的数字签名 通过https提供校验和、签名和我的公钥 我的问题是: 这样做对吗 我应该为像Comodo或Symantec这样的权威机构购买证

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

这是我想做的

  • 使用sha1或其他方法构建数据通道的校验和
  • 使用私人自签名证书生成此校验和的数字签名
  • 通过https提供校验和、签名和我的公钥
  • 我的问题是:

    • 这样做对吗
    • 我应该为像Comodo或Symantec这样的权威机构购买证书吗
    • 我可以使用https证书签署我的校验和吗
    • 如果我从权威机构购买证书,当证书过期时会发生什么?我的旧校验和签名是否不再有效
  • 使用sha1或其他方法构建数据通道的校验和

  • 使用私人自签名证书生成此校验和的数字签名

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

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

  • 通过https提供校验和、签名和我的公钥
  • 您需要发送签名,而不是校验和。实际上,发送签名不需要https(但建议使用https),因为数字签名保护消息内容并标识签名者

    客户端应在其信任存储中包含您的签名证书的根证书,以便能够验证签名。您可以脱机提供或通过https提供服务

    我应该为像Comodo或Symantec这样的权威机构购买证书吗

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

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

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

    如果我从权威机构购买证书,当证书过期时会发生什么?我的旧校验和签名是否不再有效


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

    如何“使用私钥对邮件进行签名”来保护数据不被修改?这只是因为它们存储了数据和校验和的副本才起作用。如果我们不能相互信任,我们将需要一个更激进的解决方案,比如区块链。您还可以使用第三部分,并且只允许他对数据进行签名。因此,如果没有他的同意,我将无法生成更多的签名数据。