谈谈接口开发-HTTPS 和签名

作者:vkvi 来源:ITPOW(原创) 日期:2017-3-9

在传输部分,建议使用 HTTPS 来实现防窃听等问题。

如果使用了 HTTPS,那么包括 URL、QueryString 等在内的内容,都是防窃听、防篡改的。

不过我们要注意,如果这不表示浏览器窃听不到它,浏览器如果被拿下,照样可以获取传输的内容,攻击者也可能会从浏览器的历史记录中寻找价值。

不过我们做接口似乎不用考虑这个问题,因为接口是程序相互传输数据,而不是使用浏览器人工传输数据。

请参见 DV SSL、OV SSL、EV SSL 区别

签名

对发送的数据进行签名,主要是确定数据发送者是可信的,因为只有数据发送方和接收方才有密钥。

一种签名是使用非对称加密算法,将私钥公钥反过来用,不过据我观察,很少有人用这种方法。

另一种方法是使用散列算法,将传送的数据组合起来,然后散列算法,再和密钥混合,再散列算法。

使用第二种方法是要约定很多东西,一般都能想到,只是以下几个容易搞漏:

  • 数据组合时的排序,是按 ASCII 还是按 0-9aA-zZ
  • 为防止使用过期数据,往往还有 timestamp,那么 timestamp 是用 DateTime 格式还是 Ticks?如果是 DateTime 格式那么转换成字符串是哪种格式?如果是 Ticks 那么是从什么时候开始,细化到什么程度。
  • DateTime、Decimal 等类型拼接成字符串时以什么格式拼接。
  • 散列算法的结果是大写还是小写?
  • 散列算法的结果中含不含“-”。
相关文章