HTTPS原理

HTTPS简介

HTTPS(Hyper Text Transfer Protocol Secure)是在HTTP的基础上结合SSL/TLS协议握手,实现数据安全传输。SSL/TLS是应用层的协议,介于 TCP 和 HTTP 之间的一层安全协议,不影响原有的 TCP 协议和 HTTP 协议,所以使用 HTTPS 基本上不需要对 HTTP 页面进行太多的改造。研究HTTPS协议安全相关的原理,最终就是研究SSL/TLS协议。


网络模型.png

SSL/TLS使用了非对称加密(RSA / DSA),但由于非对称加密计算量大,速度慢。所以实际的做法是服务端利用非对称加密生成的公钥生成一个对称加密的秘钥,将其传给客户端后。服务端和客户端都利用该秘钥进行加密解密。

HTTPS握手(RSA)

握手.png
  • RSA流程:
  1. 假设服务端使用的密码组是TLS_RSA_WITH_AES_128_CBC_SHA。
  2. 服务端首先查询KeyManager,给客户端返回Certificate/public key。
  3. 客户端接收Certificate/public key,然后用TrustManager验证Certificate。
  4. 如果客户端接受该Certificate,则用SecureRandom生成一个随机字节码,并使用Public key对这个随机字节码加密,并作为真正加密用的对称秘钥嵌入Client Key Exchange消息中发送给服务端。
  5. 服务端利用Private key解密之后,重新获得前一步生成的随机字节码(对称秘钥),然后用改对称秘钥解密数据。
  • DSA流程:
  1. 假设服务端使用的密码组是TLS_DHE_DSS_WITH_AES_128_CBC_SHA。
  2. 双方都使用KeyPairGenerator生成一个临时的DH 公私密钥对(需要用到KeyFactory和DHPublicKeySpec)。
  3. 双方都创建一个KeyAgree对象,并用自己的DH私钥初始化。
  4. 服务端发送ServerKeyExchange消息(附带服务端公钥),客户端发送ClientKeyExchange消息(附带客户端公钥)。两个公钥同时塞入KeyAgreement对象,然后KeyAgreement根据这两个公钥生成一个真正加密使用的Key(对称加密秘钥)。
  5. 双方使用前一步生成的对称加密秘钥对加密数据相互交互。
  • 结论:
    DSA比RAS更安全是因为使用了四个秘钥,而且不需要公开的证书,所以使得破解双方数据更难。

中间人劫持(MITM:Man-in-the-middle attack)

对客户端把自己伪装成服务端,对服务端把自己伪装成客户端,从而实现查看传输的全部内容。

  1. 客户端发送http请求,中间人进行劫持
  2. 中间人伪装成客户端,向发送http请求
  3. 服务端传公钥给中间人,中间人自己生成私钥公钥,然后传公钥给客户度
  4. 客户端生成秘钥(前提中间人公钥通过客户端的验证),利用中间人的公钥加密并把秘钥传给中间人
  5. 中间人利用自己的私钥解密,并利用服务端的公钥加密传给服务端
  6. 服务端用自己的私钥解密出客户端的秘钥
  7. 客户端、中间人、服务端使用相同的秘钥进行传输,中间人可以窜改服务端和客户端的内容。
  • charles抓包、mock数据就是典型的中间人劫持

Charles获取Https内容

中间人劫持过程第4中,客户端获取中间人的公钥,只要让客户端通过该公钥的验证,就可以实现https劫持,而要做到通过验证,只需要将三方自己的CA签发的数字证书安装到手机中并且作为受信任证书保存即可

  1. 选择SSL Proxying,选择安装证书到移动设置


    选择安装证书
  2. 根据提示做(手机连好代理,去网站下载证书进行安装)


    下载安装证书

    3.设置代理,添加需要代理的host


    设置代理

客户端如何验证公钥合法

服务端给客户端实际上是一本证书,这个证书里面包含了

  1. 公钥
  2. 各种信息
  3. 签名
    这个签名是服务端用私钥 对 “各种信息” 进行加密生成的,客户端拿到证书里的公钥,对签名进行解密,解密后得到的各种信息和证书里的各种信息进行对比,如果相等则保证了证书是合法的。

但如果中间人使用合法的证书,依然可以进行攻击,如上述的Charles,那么如何预防。

1.内置证书
将真正的证书预先内置在客户端app中,用该证书里的公钥对服务端下发的签名进行解密,解密失败或者和各种信息信息不一致,则断开连接。不过这种方式会有证书过期的问题,一般只有安全性要求非常高的app才会这么做,如一些银行app。
2.通过证书合法性、域名校验等

参考:

HTTPS连接过程以及中间人攻击劫持
HTTPS原理以及Java实现
Android _实现SSL解决不受信任的证书问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容