Python爬虫教程

第一章: 初学乍练-Python快速入门

第二章: 初窥门径-从全局把握网络爬虫

第三章: 爬虫数据-网页与JSON

第四章: 爬虫核心-HTTP协议

第五章: 手到擒来-数据的抓包

第六章: 利刃出鞘-HTTP请求库

第七章: 尘埃落定-数据的解析

第八章: 逆向初探-JS逆向

第九章: 爬虫进阶-Selenium, 中间人拦截

第十章:斗转星移-常用的反爬策略及应对方法

首页 > Python爬虫教程 > 第四章: 爬虫核心-HTTP协议 > 4.4节: 加密数据传输HTTPS

4.4节: 加密数据传输HTTPS

薯条老师 2021-02-22 10:04:17 233754 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

4.4.1 HTTP的明文传输

首先得理解何为明文:凡是未经加密的字符串,都是明文。那么密文呢?密文就是加密后的字符串。既然HTTP传输的只是明文,那么我们先在应用层对数据进行加密,然后再通过HTTP传输,此时仍然是明文传输吗?

已加密后的字符串相对于未加密前的字符串,它是密文。但对于HTTP协议来说,它无法区分当前传输的数据是否已加密,所以都一例视为"明文"。

HTTP的明文传输很好理解,即未对数据作任何处理,客户端发送什么,就原样传输什么。明文传输的不足在于,需要应用程序(客户端,服务端)自行做复杂的加解密处理。未对数据进行加密而直接在网络中传输,会带来很大的安全隐患。

同HTTP协议的无状态特性一样, 未对数据作任何处理,也可以归之为HTTP协议的优点:去繁存简,保持协议的简单性。在需要支持额外的功能时,再对协议进行扩展。

为解决HTTP协议的安全传输问题,Netscape公司于1996年在HTTP的基础上加入了SSL。 HTTP+SSL也就是本节要介绍的HTTPS。

4.4.2 HTTP+SSL

SSL的全称为Secure Sockets Layer,中文翻译过来为安全套接字层,用于在浏览器和服务器之间进行身份认证和加密数据传输。理解HTTPS协议,需要具备网络协议的基础知识,对此不是很熟悉的同学,可以先简单地学习下TCP/IP协议。HTTPS即为HTTP+SSL,我们首先来看一下未加SSL的网络协议栈:

1613959718(1).jpg 

在未使用SSL层的协议栈中,HTTP数据直接传递到传输层。加了SSL以后,HTTP数据会先经由SSL层进行数据的加密,然后再传递到传输层,最终再传递到接收端的SSL层进行数据的解密。

现在使用的HTTPS采用的通常为TLS协议。TLS协议是在SSL协议的基础上扩展而来的。

1613959929(1).jpg

在HTTPS协议当中,使用对称加密算法对传输的数据进行加密和解密,同时为解决HTTP服务器的授信问题,引入了"证书"机制。在HTTPS协议当中,使用非对称加密算法来验证证书的合法性,以及传输对称加密算法中的私钥。

CA机构负责验证申请者的真实性,合法性。验证成功以后,CA机构向申请者颁发证书。证书主要包含申请者的公钥, 证书的数字签名, 证书申请者以及证书颁发者信息,证书的有效期。在必要时,CA机构也可以吊销该证书。
证书的数字签名由散列函数生成,用来校验证书的真实性,完整性,具体的细节可以参考下文中的内容。

4.4.3对称加密与非对称加密

所谓的对称加密,是指通信双方持有相同的密钥,使用该共同的密钥和加密(解密)算法来对数据进行加密和解密。

1613959991(1).jpg 

在非对称加密算法中,有一个公钥和私钥的概念。公钥即公开的密钥,私钥即非公开的密钥。数据通过私钥加密,只能用公钥解密。反之亦然,数据用公钥加密,那么只能通过私钥解密。

1613960014(1).jpg 

公钥和私钥均由通信的一方所生成,生成以后需要将公钥下发给通信的另一方。私钥只能由生成密钥对的一方所持有,不可公开,这样可以解决通信过程中的"不可抵赖"问题。所谓"不可抵赖",是指除非私钥泄露,否则传输的密文一定是持有私钥的一方所发送的。以HTTPS协议中的证书来举例。在CA证书中有一个数字签名。生成数字签名的算法如下:

(1) 将CA证书中的申请者,域名等信息通过散列函数生成一个摘要

(2) 通过私钥对摘要进行加密,此加密后的密文即数字签名。

浏览器通过HTTPS协议与服务器通信时,会先获得该CA证书。浏览器通过相同的散列生成算法,对CA证书中的公开信息生成一个摘要,假设这个摘要为A。然后利用数字证书中的公钥就可以对证书中的数字签名进行解密,假设解密后的摘要为B。如果摘要A与摘要B相等,那么就能证明该证书是服务器下发的。

4.4.4 HTTPS握手过程

不论是HTTP,还是HTTPS,都需要先与服务器建立TCP连接。HTTP协议默认使用80端口,HTTPS协议默认使用443端口。

1613960127(1).jpg 

连接建立成功以后,浏览器与HTTPS服务器协商需使用的对称加密算法,同时向服务器发送一个随机数CR0。服务器在请求头的算法列表中选择一种加密算法,随后将CA证书以及随机数SR0响应给客户端。

 

浏览器从CA证书中获取公钥,并按3.4.3节所述的验证过程对数字证书进行验证。验证成功以后,再次生成一个随机数CR1,并利用公钥对随机数进行加密,最后将密文发送给HTTPS服务器。HTTPS服务器收到密文以后,使用私钥进行解密,获得浏览器发送的随机数CR1。

1613960147(1).jpg 

完成握手以后,客户端与服务端再根据CR0+SR0+CR1计算出一个用于对称加密的密钥。在此后的数据传输中,都使用该密钥对数据进行加密和解密。

1613960167(1).jpg

4.4.5知识要点

(1) 凡是未经加密的字符串,都是明文。密文即为加密后的字符串。

(2) 在应用层可以先对数据进行加密,然后通过HTTP协议传输。但对于HTTP协议来说,它无法区分当前传输的数据是否已加密,所以都一例视为"明文"。

(3) SSL的全称为Secure Sockets Layer,用于在浏览器和服务器之间进行身份认证和加密数据传输。现在使用的HTTPS采用的都是TLS协议。TLS协议是在SSL协议的基础上扩展而来的。

(4) 所谓的对称加密,是指通信双方持有相同的密钥,使用该共同的密钥和加密(解密)算法来对数据进行加密和解密。在非对称加密算法中,有一个公钥和私钥的概念。数据如果使用私钥加密,那么只能用公钥解密。反之亦然,如果用公钥加密,那么只能通过私钥来解密。钥只能由生成密钥对的一方所持有,不可公开,用来解决通信过程中的"不可抵赖"问题。

(5) 不论是HTTP,还是HTTPS,都需要先与服务器建立TCP连接。HTTP协议默认使用80端口,HTTPS协议默认使用443端口。

4.4.6 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4)
Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:

TAGS:HTTPS

欢迎 发表评论: