HTTP/HTTPS安全传输协议

  • A+
所属分类:存储应用

http:

《HTTP/HTTPS安全传输协议》

https:

《HTTP/HTTPS安全传输协议》

数据加解密:

RSA加解密: 加密实现 cipher = RSA.encrypt(plain, privateKey);解密实现plain = RSA.decrypt(cipher, publicKey)。优点是非对称加解密,加密密钥和解密密钥不是同一个,保证私钥安全性的情况下,解密难度很大;缺点是性能上不如对称加解密。
AES加解密:加密实现cipher = AES.encrypt(plain, key);解密实现plain = AES.decrypt(cipher, key)。优点是性能上优于RSA加密,一般采用动态密钥;缺点是对称加解密,加解密密钥是同一个,一方密钥泄密后,安全性无法保证。
HTTPS证书传输:传输过程通过 非对称加密SSL握手&使用对称加密通信;优点是非对称加密和对称加密结合使用,非对称加密用于连接握手阶段,对称加密用于数据通信阶段,安全性和性能兼顾;缺点是对业务来说,HTTP请求需要握手校验证书,比较重。

数据签名验签:

DSA签名:生成签名:signature = DSA.sign(plain, privateKey);校验签名:DSA.verify(plain, signature, publicKey)。优点是数据签名使用的密钥和校验数据和签名使用的密钥是不同密钥,安全性较好;缺点是性能一般。
MD5签名:生成签名: signature = MD5.generate(plain, signKey);校验签名:MD5.verify(plain, signature, signKey)。优点是一般使用一个字符串追加到签名文本后,计算哈希,简单易懂,互联网请求常用做法;缺点是生成哈希值长度为32位,容易被破解,安全性不高。
SHA-1签名:生成签名: signature = SHA1.generate(plain, signKey);校验签名:SHA1.verify(plain, signature, signKey)。优点是和MD5签名类似,也是互联网请求签名常用做法;缺点是计算性能较低,哈希值长度较长。

安全协议1.0:

POST /XXX?method=xxx&clientype=xxx&netype=xxx&id=xxx&p=xxx&gz=1&apkid=xxx&t=xxx&syn=xxx&sign=xxx

Charset: UTF-8

User-Agent: Register/1.0.0 (Android [Build.VERSION.RELEASE]; Linux)

Content-Type: application/octet-stream

数据对象 -> JSON编码 -> AES加密 -> GZIP压缩

《HTTP/HTTPS安全传输协议》

《HTTP/HTTPS安全传输协议》

使用AES对称加密,客户端和服务器密钥相同,并且是静态内置的,容易泄露,安全性无法保证
签名发生在数据加密之后压缩之前,限制了协议的灵活性
协议中某些信息,比如使用IMEI作为设备ID,不符合集团隐私政策
微信安全协议:

API?signature={signature}×tamp={timestamp}&nonce={nonce}&msg_signature={msg_signature}

Charset: UTF-8

Content-Type: text/plain

签名字符串:”jsapi_ticket=” + jsapi_ticket + “&noncestr=” + nonce_str + “×tamp=” + timestamp + “&url=” + url

——————————————————–

响应结果:

HTTP/1.1 200 OK

Content-Encoding: gzip

Last-Modified: Tue, 15 Dec 2015 02:18:29 GMT

ETag: “80487e3de36d11:0”

Content-Length: 9039

Age: 1

X-Via: 1.1 lishui17:6 (Cdn Cache Server V2.0)

加密包体

———————————————————

POST /mmtls/04a2f532

Connection: close

Content-Length: 834

Content-Type: application/octet-stream

User-Agent: MicroMessenger Client

加密包体

《HTTP/HTTPS安全传输协议》

如图:所有API使用序列号代替,不可阅读;非对称加密

安全协议2.0

POST /XXX?method=xxx&clientype=xxx&netype=xxx&id=xxx&p=xxx&gz=1&apkid=xxx

&t=xxx&syn=xxx&enclosed=xxx&sign=xxx

Charset: UTF-8

User-Agent: Register/1.0.0 (Android [Build.VERSION.RELEASE]; Linux)

Content-Type: application/octet-stream

数据对象 -> JSON编码 -> 加密 -> GZIP压缩

———————————————————

HTTP/1.1 XXX XXX

Content-Type: application/octet-stream

Charset: UTF-8

Server: XXX

Content-Length: XXX

数据对象 -> JSON编码 -> 加密 -> GZIP压缩

———————————————————

code:XXX,错误码,0为成功,必选

message:XXX,错误码的说明,必选

reason:XXX,如果执行失败,显示失败原因,可选

syn:当前请求的序列号,必选

———————————————————

请求:

序号 字段 说明 备注
1 method 请求的API下的接口名,可选
2 clientype 客户端类型,等于android,必选
3 netype 手机当前的网络类型,必选
4 id 设备ID,等于m1,必选
5 p 当前协议版本号,默认为1,可选
6 gz 说明包体是否使用压缩,默认为0,可选
7 apkmid 为客户端分配的APKID,必选
8 t 当前请求的时间戳,必选 请求重试,时间戳变化,一般用于计算发送时间
9 syn 当前请求的序列号,客户端生成,必选 请求重试时序列号不变,一般用于对业务请求计数
10 enclosed 数据加密算法描述信息,必选
11 sign 请求参数(包括请求包体数据)的签名,必选

响应:

序号 字段 说明 备注
1 code 执行错误码,0为成功,其它失败,必选
2 message 对错误码的说明,当客户端指定语言时,返回对应语言的说明,必选
3 reason 如果执行失败(错误码非0),该字段表示指定失败的原因,可选
4 syn 对应请求URL参数中syn字段,必选
响应:

序号 字段 说明 备注
1 succ 说明执行成功或者失败,如果失败code详细说明,必选
2 code 执行错误码,succ为false为必选 最好用 1 和 0
3 message 错误码的说明,指定语言,succ为false为必选
4 reason 表示执行失败的原因,可选
5 syn 对应请求URL参数中syn字段,必选

《HTTP/HTTPS安全传输协议》

数据签名:

《HTTP/HTTPS安全传输协议》

REST请求:

《HTTP/HTTPS安全传输协议》

非REST请求:

《HTTP/HTTPS安全传输协议》

  • 安卓客户端下载
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar