html
HTTPS科普扫盲帖segmentfault
HTTPS小结浏览器
HTTP是明文传输未加密,安全性差,HTTPS(HTTP + SSL)数据传输是加密的,安全性较好安全
HTTPS协议须要到CS申请——收费服务器
HTTP页面响应速度比HTTPS快,主要是由于 HTTP 使用 TCP 三次握手创建链接,客户端和服务器须要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手须要的 9 个包,因此一共是 12 个包。 测试
默认端口不一样网站
HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,因此,要比较 HTTPS 比 HTTP 要更耗费服务器资源。ui
HTTPS = HTTP + 加密 + 认证 + 完整性保护加密
HTTPS 经由 HTTP 进行通讯,可是利用SSL/TLS来进行加密数据包。
SSL 提供 加密处理 和 认证 以及 摘要功能
HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
通常,HTTP是与TCP直接通讯,如今使用SSL,HTTP先与SSL通讯,SSL和TCP通讯。
通俗的讲,TLS、SSL实际上是相似的东西,SSL是个加密套件,负责对HTTP的数据进行加密。TLS是SSL的升级版。如今提到HTTPS,加密套件基本指的是TLS。
SSL 是独立于 HTTP 的协议, 因此不光是 HTTP 协议, 其余运行在应用层的 SMTP和 Telnet 等协议都可配合 SSL 协议使用。
传输流程:原先是应用层将数据直接给到TCP进行传输,如今改为应用层将数据给到TLS/SSL,将数据加密后,再给到TCP进行传输。如图:
HTTPS 默认工做在 TCP 协议443端口,它的工做流程通常如如下方式:
服务端的配置 ,客户端验证服务器数字证书(这套证书其实就是一对公钥和私钥 )
传送证书,这个证书就是公钥,其中包含了证书的颁布机构,过时时间等
客户端解析证书,这个部分的工做是客户端的TLS来完成的,首先会验证公钥是否有效,好比颁发机构,过时时间等,若是发现异常,则会弹出一个警告框,提示证书存在问题。
若是证书没有问题,那么就生成一个随机值,而后用证书对改随机值进行加密
传送加密信息,此时传送的是用证书加密后的随机值,目的就是让服务器获得这个随机值,之后客户端和服务器端的通讯就能够经过这个随机值来进行加密解密了。
服务器端解密信息,服务器端用私钥解密后,获得客户端传过来的随机值(私钥),而后把内容经过该值进行对称加密,所谓对称加密就是,将信息和私钥经过某种算法混合在一块儿,这要除非知道私钥,否则没法获取内容,而客户端和服务器端都知道这个私钥,因此只要加密算法够彪悍,私钥够复杂,数据就足够安全。
传输加密后的信息,这部分信息是服务器端用私钥加密后的信息,能够在客户端还原。
客户端解密信息,客户端用以前生成的私钥解密服务端传过来的信息,因而获取了解密后的内容,整个过程第三方即便监听到了数据,也一筹莫展。
加密分为:对称加密和非对称加密
流程:客户端和服务器端进行一次私密对话:
1.每次对话时,服务器端都要给客户端一个秘钥
2.客户端把数据加密之后,发送给服务器端
3.服务器端使用秘钥解密接收到的数据
优势:效率高
缺点:不够安全,万一黑客把秘钥和密文截取了,他就能够解密这段数据了
流程:客户端和服务器端进行一次私密对话:
1.服务器端要给客户端一个公钥(全世界都知道),服务器端保留这个服务器对应的的私钥
2.客户端用公钥把数据加密之后,发送给服务器端
3.服务器端使用对应的的私钥解密接收到的数据
优势:效率低
缺点:不够安全,万一黑客把密文截取了(公钥早就知道了),他就能够解密这段数据了
另外一种解释(一人一种理解 -.-'):
HTTPS在传输数据以前须要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程当中将确立双方加密传输数据的密码信息。TLS/SSL协议不只仅是一套加密传输的协议,更是一件通过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的简单描述以下:
1.浏览器将本身支持的一套加密规则发送给网站。
2.网站从中选出一组加密算法与HASH算法,并将本身的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3.得到网站证书以后浏览器要作如下工做:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),若是证书受信任,则浏览器栏里面会显示一个小锁头,不然会给出证书不受信的提示。
b) 若是证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将以前生成的全部信息发送给网站。
4.网站接收浏览器发来的数据以后要作如下的操做:
a) 使用本身的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
b) 使用密码加密一段握手消息,发送给浏览器。
5.浏览器解密并计算握手消息的HASH,若是与服务端发来的HASH一致,此时握手过程结束,以后全部的通讯数据将由以前浏览器生成的随机密码并利用对称加密算法进行加密。
这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都得到了一致的密码,而且能够正常的加密解密数据,为后续真正数据的传输作一次测试。另外,HTTPS通常使用的加密与HASH算法以下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
其中非对称加密算法用于在握手过程当中加密生成的密码,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性。因为浏览器生成的密码是整个数据加密的关键,所以在传输的时候使用了非对称加密算法对其加密。非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,所以能够随意传输,而网站的私钥用于对数据进行解密,因此网站都会很是当心的保管本身的私钥,防止泄漏。
在以上流程中, 应用层发送数据时会附加一种叫作 MAC
( Message Authentication Code) 的报文摘要。 MAC 可以查知报文是否遭到篡改, 从而保护报文的完整性。