基本概念
HTTP(HyperText Transfer Protocol:超文本传输协议)
是一种用于分布式、协作式和超媒体信息系统的应用层协议。简单来说就是一种发布和接收HTML页面的方法,被用在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。HTTP默认工作在TCP协议80端口。
HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)
是一种透过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据报。HTTPS开发的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
本文主要就HTTPS作为介绍,HTTP的内容参见计算机网络应用层一文
。
HTTPS的工作原理
HTTPS的工作流程
HTTPS默认工作在TCP协议443端口,它的工作流程一般如以下方式:
TCP三次同步握手 客户端验证服务器数字证书 DH算法协商对称加密算法的密钥、hash算法的密钥 SSL安全加密隧道协商完成 网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改
对称加密

对称加密是指客户端和服务端都约定一个密钥,客户端发送的时候用这个密钥加密,服务端再解密
这种方式的缺点是
客户端和服务器都要维护大量的密钥,造成资源浪费 每个客户端和服务端的安全级别不同,密钥极易泄露 不容易约定密钥
非对称加密

客户端用公钥对请求内容加密,服务器用私钥对内容解密。
这种方式依旧存在缺点
公钥是公开的,所以私钥加密的信息,如果被黑客截获,其可以使用公钥进行解密
对称加密和非对称加密联合使用

通过公私钥对对称密钥进行约定,但也存在一定问题:使用服务器给的公钥对后续约定的私钥进行加密,但无法保证从服务区获取的公钥,可能已经被黑客截取并且发了一个假的公钥。
数字证书
也就是大名鼎鼎的SSL验证
中间大量原理本文暂且不提,有兴趣自行百度,这里只说说客户端怎么验证数字证书。面试大概提一下下面以及前面的内容就行了
浏览器验证证书的步骤
首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验 浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发 如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。 如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密 浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比 对比结果一致,则证明服务器发来的证书合法,没有被冒充 此时浏览器就可以读取证书中的公钥,用于后续加密了
HTTP与HTTPS区别
HTTP明文传输,数据都是未加密的,安全性较差;HTTPS(SSL+HTTP)数据传输过程是加密的,安全性较好 使用HTTPS协议需要到CA申请证书 HTTP页面响应速度比HTTPS快,主要是因为HTTP使用TCP三次握手建立连接,只需要三个包,而HTTPS除了TCP的三个包,还要加上SSL握手需要的9个包 HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443 HTTPS实际上就是建立在SSL/TLS之上的HTTP协议,所以,要比较HTTPS与HTTP要更消耗服务器资源
文章转载自别动我的月亮啊,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




