如何签署API提供的数据

时间:2017-02-13 10:17:22

标签: ssl certificate digital-signature

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

这是我想要做的。

  1. 使用sha1或其他方式构建数据块的校验和。
  2. 建立此校验和的数字签名,使用私人自签证书。
  3. 通过https提供校验和,签名和公钥。
  4. 我的问题是:

    • 这是正确的方法吗?
    • 我应该为Comodo或Symantec等权威机构购买证书吗?
    • 我可以使用https证书签署校验和吗?
    • 如果我从权威机构购买证书到期时发生的事情?我的旧校验和签名是否已经无效?

1 个答案:

答案 0 :(得分:0)

  
      
  1. 使用sha1或其他方式构建数据块的校验和。

  2.   
  3. 建立此校验和的数字签名,使用私人自签证书。

  4.   

你应该在消息上进行数字签名,而不是在校验和上(数字签名过程本身就是消息的散列,但你不必处理这个)

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

  
      
  1. 通过https提供校验和,签名和公钥。
  2.   

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

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

  

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

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

  

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

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

  

如果我从权威机构购买证书到期时发生的事情?我的旧校验和签名不再有效吗?

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