https分享

https 分享_.png

开篇

https

https = HyperText Transfer Protocol Secure =超文本传输安全协议
即 HTTP over TLS、HTTP over SSL

tls/ssl区别与联系

简单的说可以认为tls和ssl是一回事. 为什么改了名字, 因为SSL是网景的, TLS是互联网标准化组织ISOC的
什么是tls=Transport Layer Security,ssl = Secure Sockets Layer

SSL是Netscape开发的专门用户保护Web通讯的,目前版本为3.0。最新版本的TLS 1.0是IETF(工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1,它是写入了RFC的

所以以后我们统一说TLS就好了。
[图片上传失败...(image-b07c3e-1589354193162)]

为什么大家都改用https了, 因为http 存在以下问题 @兔哥

(1) 窃听风险(eavesdropping):第三方可以获知通信内容。

(2) 篡改风险(tampering):第三方可以修改通信内容。

(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。

  1. 某电商用户报上来故障, 登录查看订单, 看到了别人的订单. WTF
  2. 打开一个网页, 这广告来的莫名其妙. 右下角弹出了联通电信的logo

网络包

https建立连接的交互过程抓包

[图片上传失败...(image-c1b5da-1589354193162)]

先说前先三个包

回忆一下tcp 的四层架构<漏掉了sctp>
[图片上传失败...(image-4753c4-1589354193162)]

[图片上传失败...(image-39054f-1589354193162)]
源端口目的端口各16位, 把以端口的最大数字为2^16=65536,后接32位的序列号和确认号
0xCD 08 --> 0x01 BB [port: 52488->443] 序号
SYN包:
0000 58 69 6c 32 b5 fd 88 e9 fe 69 0e 37 08 00 45 00
0010 00 40 00 00 40 00 40 06 27 68 1e 0b ab 2e 1e 0b
0020 2c 0c <b>cd 08 01 bb</b> <b>a7 91 4a 27</b> 00 00 00 00 b0 02
0030 ff ff 6b f4 00 00 02 04 05 b4 01 03 03 05 01 01
0040 08 0a 8a d1 6c 6a 00 00 00 00 04 02 00 00
SYN ACK+1 确认号=序号+1
0000 88 e9 fe 69 0e 37 58 69 6c 32 b5 fd 08 00 45 00
0010 00 34 00 00 40 00 3d 06 2a 74 1e 0b 2c 0c 1e 0b
0020 ab 2e <b>01 bb cd 08</b> 66 68 8e d4 <b>a7 91 4a 28</b> 80 12
0030 05 b4 a0 40 00 00 02 04 05 b4 01 01 04 02 01 03
0040 03 09
ACK
0000 58 69 6c 32 b5 fd 88 e9 fe 69 0e 37 08 00 45 00
0010 00 28 00 00 40 00 40 06 27 80 1e 0b ab 2e 1e 0b
0020 2c 0c <b>cd 08 01 bb</b> a7 91 4a 28 <b>66 68 8e d5</b> 50 10
0030 20 00 c6 c8 00 00

同回忆一下osi七层架构

[图片上传失败...(image-2a9f9a-1589354193162)]

再看一下TCP包结构

[图片上传失败...(image-a7fc97-1589354193162)]

源端口和目的端口字段——各占2字节。端口是传输层与应用层的服务接口。传输层的复用和分用功能都要通过端口才能实现。
  序号字段——占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
  确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
  数据偏移——占4bit,它指出TCP报文段的数据起始处距离 CP报文段的起始处有多远。“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。
  保留字段——占6bit,保留为今后使用,但目前应置为0。
  紧急比特URG——当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
  确认比特ACK——只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。
  复位比特RST(Reset) —— 当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
  同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。
  终止比特FIN(FINal)——用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
  窗口字段——占2字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
  检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
  紧急指针字段——占16bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。
  选项字段——长度可变。TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。
  填充字段——这是为了使整个首部长度是4字节的整数倍。

顺便贴了一下udp的包结构

[图片上传失败...(image-8470ea-1589354193162)]

IP数据包

[图片上传失败...(image-6d43fc-1589354193162)]

[图片上传失败...(image-28cbef-1589354193162)]

65252ddd 这个就是tiaojie.tiaojiecloud.com对应的Ip地址
88:e9:fe:69:0e:37 是我本机的mac地址

Https连接建立

[图片上传失败...(image-9a6b25-1589354193162)]

(1) 客户端向服务器端索要并验证公钥。

(2) 双方协商生成"对话密钥"。

(3) 双方采用"对话密钥"进行加密通信。

clientHello

  • (1) TLS版本
  • (2) Client随机数Random1
  • (3) session-id
  • (4) 加密算法套装列表
  • (5) 压缩算法
  • (6) 扩展字段,比如密码交换算法,请求主机名字等

[图片上传失败...(image-e0307c-1589354193162)]

SeverHello:

  • TLS版本

  • Server随机数Random2

  • 确定的加密套件,压缩算法

  • Certificate, Server Key Exchange, Server Hello Done

  • Certificate,CA证书 公钥证书

  • Server Key Exchange,密钥交换算法和相关数据

  • Server Hello Done,事件消息 ,注意一下GCM是aes采用counter机制进行加密
    [图片上传失败...(image-9cbb93-1589354193162)]

[图片上传失败...(image-972039-1589354193162)]

[图片上传失败...(image-b167cb-1589354193162)]
[图片上传失败...(image-ca5cbf-1589354193162)]

客户端回应:

  • Client Key Exchange,交换密钥参数

这里客户端会再生成一个随机数Random3。然后使用服务端传来的公钥进行加密得到密文PreMaster Key。服务端收到这个值后,使用私钥进行解密,得到Random3。这样客户端和服务端就都拥有了Random1、Random2和Random3。这样两边的秘钥就协商好了。后面数据传输就可以用协商好的秘钥进行加密和解密。

  • Change Cipher Spec,编码改变通知。

这一步是客户端通知服务端后面再发送的消息都会使用前面协商出来的秘钥加密了,是一条事件消息。

  • Encrypted Handshake Message

这一步对应的是 Client Finish 消息,客户端将前面的握手消息生成摘要再用协商好的秘钥加密,这是客户端发出的第一条加密消息。服务端接收后会用秘钥解密,能解出来说明前面协商出来的秘钥是一致的。

会话秘钥 = DES(random1+random2+rsa(ramdom3))
[图片上传失败...(image-215d64-1589354193162)]

New Session Ticket, Change Cipher Spec, Encrypted Handshake Message:

New Session Ticket

包含了一个加密通信所需要的信息,这些数据采用一个只有服务端知道的密钥进行加密。目标是消除服务器需要维护每个客户端的会话状态缓存的要求。

Change Cipher Spec,编码改变通知

Encrypted Handshake Message

这一步对应的是Server Finish消息,服务端也会根据握手过程的消息生成摘要再用秘钥加密,这个服务端发出的第一条加密消息。客户端接收后会用秘钥解密,能解出来说明协商的秘钥是正确的。
[图片上传失败...(image-bca908-1589354193162)]

preMasterSecret 与 MasterSecret

[图片上传失败...(image-5a197b-1589354193162)]
Master secret是有系列的hash值组成的,它将作为数据加解密相关的secret的Key Material。Master secret最终解析出来的数据如下:

其中,write MAC key,就是session secret或者说是session key。Client write MAC key是客户端发数据的session secret,Server write MAC secret是服务端发送数据的session key。MAC(Message Authentication Code),是一个数字签名,用来验证数据的完整性,可以检测到数据是否被串改。

master_secret = PRF(pre_master_secret, "master secret",
ClientHello.random + ServerHello.random)

nginx config

server {
       #ssl参数
       listen              443 ssl;
       server_name         shxb.taobao.net;
       #证书文件
       ssl_certificate     example_com.crt;
       #私钥文件
       ssl_certificate_key example_com.key;
       ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
       ssl_ciphers         HIGH:!aNULL:!MD5;

openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout example_com.key -out example_com.crt

这是一个自签名的证书
[图片上传失败...(image-2dd20b-1589354193162)]

certficate: 即example_com.crt

wireshark抓https的包

export SSLKEYLOGFILE=~/ssl/key.log

在wireshark中导入 key.log

hsts

[图片上传失败...(image-9061e5-1589354193162)]

chrome://net-internals

  1. HSTS可以禁止浏览器使用无效证书(浏览器的默认策略是让用户决定是否放行,而用户往往因为不能区分无效是因为配置问题还是攻击而选择继续访问从而导致遭受网络攻击)

  2. HSTS对以下情况可以仍然保持HTTPS通信:
    [图片上传失败...(image-d96bc0-1589354193162)]
    · 用户保存了原始网站的书签

· 不安全的Cookie

· HTTPS 剥离攻击

· 网站内容混布,但需配合CSP(内容安全策略)

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