Json SHA256 RSA 签名

用 openssl 来生成私钥和公钥

openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout -out public.pem

责任划分

模式为客户端使用私钥进行签名, 并将公钥提供给验证服务器, 将私钥的安全责任甩给客户端, 服务器端免责.

服务器端仅使用公钥来进行数据有效性的验证

签名时数据格式

因为签名验证说白了只是对 string 进行验证

json to string 时, 因为排序等原因, 不同语言, 不同系统会生成不同的 string

签名按如下方式生成:

  1. 将 JSON 中的所有 key-value 对(sign除外)记为key=value形式的字符串,放入数组param;
  2. param进行字典排序;
  3. 使用&连接param内的所有值, 得到字符串content;
  4. content进行 SHA256,得到哈希hashed;
  5. 使用RSASSA-PKCS1-V1_5-SIGN以及app_private_keyhashed签名,得到rsa_sign;
  6. 使用 base64 对rsa_sign进行编码,得到sign;
  7. sign放入 JSON,完成

签名验证步骤

  1. 将 JSON 中的所有 key-value 对(sign除外)记为key=value形式的字符串,放入数组param;
  2. param进行字典排序;
  3. 使用&连接param内的所有值, 得到字符串content;
  4. content进行 SHA256,得到哈希hashed;
  5. 使用RSASSA-PKCS1-V1_5-VERIFY以及dabank_public_key验证hashed的签名是否正确