网络(四):应用层HTTPS

目录

一、HTTPS是什么
二、SSL/TLS是什么
三、HTTPS的通信过程

网络(一):基础知识
网络(二):传输层TCP、UDP
网络(三):应用层HTTP
网络(四):应用层HTTPS


一、HTTPS是什么


HTTPS(Hyper Text Transfer Protocol Secure),超文本传输安全协议,设计HTTPS的目的就是为了安全传输数据。HTTPS的默认端口号是443,HTTP的默认端口号是80。

HTTPS是安全的,但并非所有公司都使用了HTTPS,又或者公司某些涉及敏感数据的请求才使用了HTTPS、其它还是使用HTTP,这是因为使用HTTPS是有成本的:

  • 证书的费用;
  • 因为需要对传输数据进行加解密,所以降低了访问的速度。


二、SSL/TLS是什么


HTTPS也常被称为HTTP over SSL或HTTP over TLS,即使用了SSL的HTTP或使用了TLS的HTTP。

TLS(Transport Layer Security),传输层安全协议,它的前身就是SSL(Secure Socket Layer),安全套接层协议。历史版本信息:

  • SSL 1.0:从未发布,因为存在严重的安全漏洞
  • SSL 2.0:1995年发布,2011年弃用
  • SSL 3.0:1996年发布,2015年弃用
  • TLS 1.0:1999年发布
  • TLS 1.1:2006年发布
  • TLS 1.2:2008年发布
  • TLS 1.3:2018年发布

SSL/TLS工作在应用层和传输层之间,应用层的数据会使用SSL/TLS生成的密钥加密后再传递给传输层,从而保证了数据在传输过程中的安全性。


三、HTTPS的通信过程


HTTPS的通信过程可以分为四大阶段:

  • ① TCP三次握手
  • SSL/TLS连接——这个连接过程本质来说就是一个生成和传输对称加密密钥的过程
  • ③ HTTP请求和HTTP响应
  • ④ TCP四次挥手

接下来我们就看一下TLS是怎么生成和传输对称加密密钥的,这个过程会有十次关键的握手,我们省略了一些不关心的ACK:

  • 第一次TLS握手

客户端会给服务器发送一个Client Hello消息,该消息内部包含TLS的版本——用来告诉服务器客户端想使用哪个版本的TLS,包含支持的加密套件——用来告诉服务器客户端支持哪些密钥交换算法以及支持哪些加密算法、消息摘要算法,包含一个随机数Client Random——将来用来生成对称加密的密钥。

  • 第二次TLS握手

服务器会给客户端发送一个Server Hello消息,该消息内部包含TLS的版本——用来告诉客户端服务器想使用哪个版本的TLS,包含选择的加密套件——用来告诉客户端服务器选择了哪一套密钥交换算法以及哪一套加密算法、消息摘要算法(假设选择了TLS_ECDHE_ECDSA_...),包含一个随机数Server Random——将来用来生成对称加密的密钥。

  • 第三次TLS握手

服务器会给客户端发送一个Certificate消息—— 服务器会把在CA认证过的证书(包含公钥、公钥的数字签名等信息)发给客户端,客户端会用CA公钥来验证并获取到公钥,这个公钥就是将来非对称加密要用到的公钥。

  • 第四次TLS握手

服务器会给客户端发送一个Server Key Exchange消息—— 对称加密的密钥交换算法ECDHE_ECDSA需要一些参数,服务器需要提供一部分、并发给客户端,我们把服务器提供的这部分参数称之为Server Params。

  • 第五次TLS握手

服务器会给客户端发送一个Server Hello Done消息—— 服务器告诉客户端服务器已经没什么协商数据需要发给客户端了。

  • 第六次TLS握手

客户端会给服务器发送一个Client Key Exchange消息——对称加密的密钥交换算法ECDHE_ECDSA需要一些参数,客户端需要提供一部分、并发给服务器,我们把客户端提供的这部分参数称之为Client Params。

至此,客户端和服务器就都拥有了如下数据:Client Random、Server Random和Client Params、Server Params。紧接着客户端和服务器就都会使用密钥交换算法ECDHE_ECDSA根据Client Params、Server Params生成一个主密钥Pre-master Secret,然后再结合Client Random、Server Random,生成两个最终的对称加密密钥1(供HTTP请求使用)、对称加密密钥2(供HTTP响应使用),这也就意味着客户端和服务器都拥有了对称加密的密钥,之所以把对称加密的密钥生成搞得这么复杂——客户端出一些数据、服务器出一些数据、再经过密钥交换算法ECDHE_ECDSA,就是为了保证安全。并且客户端也拥有了用于非对称加密的服务器公钥,服务器本来就自己存储着用于非对称加密的服务器私钥。

不过在这个过程中,我们注意到对称加密的密钥并没有参与传输,而是客户端和服务端各自使用同样的算法、同样的参数生成了同样的密钥各自存储,那上面第三次握手的证书和非对称加密在HTTPS里有啥用?其实这只是因为服务器在第二次握手的时候选择了TLS_ECDHE_ECDSA_...加密套件,这个套件的密钥交换算法就是各自生成密钥,不需要传输,而如果服务器选择了TLS_ECDHE_RSA_...这样的加密套件,就需要用证书和非对称加密来传输对称加密的密钥了。

  • 第七次TLS握手

客户端会给服务器发送一个Change Cipher Spec消息——客户端告诉服务器以后客户端发给服务器的数据都会用对称加密的密钥进行加密。

  • 第八次TLS握手

客户端会给服务器发送一个Finished消息——客户端会把第一次TLS握手 ~ 第七次TLS握手全部的数据生成一个摘要,然后再把这个摘要用对称加密密钥1加密之后发送给服务器,目的就是为了让服务器去解密,进而判定对称加密密钥1能有效加解密。

  • 第九次TLS握手

服务器也会给客户端发送一个Change Cipher Spec消息——服务器告诉客户端以后服务器发给客户端的数据也都会用对称加密密钥2进行加密。

  • 第十次TLS握手

服务器会给客户端发送一个Finished消息——服务器会把第一次TLS握手 ~ 第九次TLS握手全部的数据生成一个摘要,然后再把这个摘要用对称加密密钥2加密之后发送给客户端,目的就是为了让客户端去解密,进而判定对称加密密钥2能有效加解密。

至此,TLS连接建立成功,可见TLS连接也像TCP连接一样其实指的就是一些数据的交换(至于TLS建立连接这件事,我们开发者不用管,就像TCP建立连接一样,是由系统的网络框架做的)。

接下来,客户端和服务器就会用对称加密的密钥来对HTTP请求和HTTP响应加密传输了(至于加解密这件事,我们开发者不用管,也是由系统的网络框架做的)。

实际开发中,服务端需要去生成公私钥,并且去CA注册公钥生成证书,然后在服务器上配置好证书,以此支持HTTPS;而我们客户端只需要把证书转换成cer文件放到项目里,再把URL的http换成https,再设置下AFN security的两个属性就可以了,接下来当我们发起一个HTTPS请求后,服务器就会把证书发给我们,AFN就会做证书验证、系统的网络框架就会做安装证书、进而做HTTPS通信的各种事情,我们就不必多虑了。

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

推荐阅读更多精彩内容