http和https什么关系?
Posted 羊卓的杨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http和https什么关系?相关的知识,希望对你有一定的参考价值。
HTTP和HTTPS都是互联网通信协议,其中HTTP是Hypertext Transfer Protocol的简称,HTTPS则是HTTP Secure的缩写。二者的主要区别如下:
1.安全性:HTTPS利用SSL/TLS加密协议对通信数据进行加密,可以保证通信过程中数据的机密性、完整性和可靠性,防止信息被窃取、篡改、伪造等安全问题,而HTTP则没有加密功能,传输的数据有可能会被拦截、劫持或者修改。
2.端口号:HTTP协议使用的端口号是80,而HTTPS协议使用的端口号是443。
3.认证方式:HTTPS可以使用数字证书对服务器进行认证,以确保客户端连接的是正确的服务器,而HTTP则没有认证功能。
综上所述,HTTPS比HTTP更加安全可靠,在涉及到敏感信息传输的场景中,如在线支付、网上购物、账号登录等方面,建议使用HTTPS协议来保护用户数据的安全和隐私。
SSL协议?
SSL(Secure Socket Layer)协议是一种安全的通信协议,主要用于保障网络通信过程中数据的机密性、完整性和可靠性。 SSL使用公钥和私钥的加密方式,在客户端和服务器之间建立一条安全的通信链路,以保护传输的数据。
SSL握手过程是建立SSL连接的过程,也是客户端和服务器之间安全通信的重要环节。一般情况下,SSL握手过程包括以下几个步骤:
1.客户端向服务器发起SSL连接请求:客户端向服务器发送一个消息,请求SSL连接
2.服务器回应客户端请求:服务器收到客户端的请求后,返回一个数字证书(数字证书包括公钥、证书颁发机构等信息),并告诉客户端所支持的加密算法
3.客户端验证数字证书:客户端使用数字证书验证服务器的身份是否真实,确保连接的安全性
4.客户端发送加密信息:客户端使用服务器提供的公钥加密需要传输的信息并发送给服务器
5.服务器解密加密信息:服务器使用私钥解密客户端发来加密的信息
6.建立安全连接:服务器和客户端用双方约定的加密算法进行通信,最终建立起安全连接。
在整个SSL握手过程中,双方会协商使用的加密算法、生成对称密钥等内容,以确保连接的安全性和减小信息传输的风险。
HTTPS 为啥安全? 真的安全吗?
一、HTTPS 为什么安全
HTTPS,也称作 HTTP over TLS,TLS 前身是 SSL,会有各个版本。
TLS协议在TCP/IP协议栈中的关系
上图描述了在TCP/IP协议栈中TLS(各子协议)和 HTTP 的关系。HTTP+TLS 也就是 HTTPS,和 HTTP 相比, HTTPS的优势:
上面内容参考了HTTPS工作原理。(石头在N 久前用印象笔记收藏的,现在好多原文访问不了了)
HTTPS 原理
上图就是大致介绍了 HTTPS 的握手流程,感兴趣的同学可以用 WireShark 抓包详细看看其中的每一个步骤,有助于理解 HTTPS 的完整流程。这里,我就不详述了。
大致就是客户端和服务端通过“握手会谈”商量出一个双方支持的加密算法和相应随机参数,得到一对密钥,后续的传输的内容都通过这对密钥进行加解密。
这对密钥很牛皮,比如要加密传输消息『tangleithu』,客户端通过公钥加密得到的密文『xyyaabbccdd』进行传输,服务端用自己的私钥对密文解密,恰好能得到『tangleithu』。中间错一位都不行,这样就保证了数据完整和隐私性。
因此,你在通过 HTTPS 访问网站的时候,就算流量被截取监听,获取到的信息也是加密的,啥实质性的内容也看不到。
例如,如下图所示,当我访问某个网站,此时通过 wireshark 抓包得到的信息,能获得仅仅是一些通信的IP地址而已。
HTTPS加密传输
这下放心了吗?
摸鱼的过程中,就算访问的 IP 地址被知道了,好像也无关紧要?
其实,有了 IP 地址也能获取不少信息了。
还好这个 IP 搜出来是 github,而不是……
你或许会高兴,连个网站域名都看不到,可以放心摸鱼了。不过,这是真的吗?
二、HTTPS 真的安全吗?
HTTPS 真的完全安全吗?连访问的域名都获取不到?答案是否定的。
上述 HTTPS 在握手阶段有一个很重要的东西 —— 证书。
1.SNI —— 域名裸奔
当访问 HTTPS 站点时,会首先与服务器建立 SSL 连接,第一步就是请求服务器的证书。
当一个 Server IP 只对应一个域名(站点)时,很方便,任意客户端请求过来,无脑返回该域名(服务)对应的证书即可。但 IP 地址(IPv4)是有限的呀,多个域名复用同一个 IP 地址的时候怎么办?
服务器在发送证书时,不知道浏览器访问的是哪个域名,所以不能根据不同域名发送不同的证书。
因此 TLS 协议升级了,多了 SNI 这个东西,SNI 即 Server Name Indication,是为了解决一个服务器使用多个域名和证书的 SSL/TLS 扩展。
现在主流客户端都支持这个协议的。别问我怎么知道这个点的,之前工作上因为这个事情还费了老大劲儿……
它的原理是:在与服务器建立 SSL 连接之前,先发送要访问站点的域名(Hostname),这样服务器会根据这个域名返回一个合适的证书。此时还没有办法进行加解密,因此至少这个域名是裸奔的。
如下图所示,上面的截图其实是访问网站的抓包情况,客户端发送握手请求时,很自觉带上了自己的域名。
HTTPS SNI
因此,即便是 HTTPS,访问的域名信息也是裸奔状态。你上班期间访问小电影网站,都留下了痕迹,若接入了公司网络,就自然而然被抓个正着。
除了域名是裸奔外,其实还有更严重的风险,那就是中间人攻击。
2.中间人攻击
前面也提到 HTTPS 中的关键其实在于这个证书。从名字可以看出来,中间人攻击就是在客户端、服务器之间多了个『中介』,『中介』在客户端、服务器双方中伪装对方,如下图所示,这个『MitmProxy』充当了中间人,互相欺骗:
中间人攻击,来源 evil0x
可以安装 MitmProxy 或者 Fiddler 之类的抓包软件尝试一把,然后开启代理。
此时用手机访问百度,得到的信息如下:
证书信任前
提示,连接不是私密连接,其实就是浏览器识别了证书不太对劲,没有信任。而如果此时手机安装了 Fiddler 的证书,就会正常访问。
证书信任后可正常访问
因此,当你信任证书后,在中间人面前,又是一览无余了。
而如果你用了公司电脑,估计你有相应的操作让信任证书吧,或者手机上是否有安装类似的客户端软件吧?
抓紧时间看看手机的证书安装明细
三、如何防止信息安全,反爬
前面提到,要实施中间人攻击,关键在于证书是否得到信任。浏览器的行为是证书可以让用户授权是否信任,而 APP 就可以开发者自己控制。
比如我尝试通过类似的方式对某匿名社区进行抓包解密 HTTPS,但最终失败了,为什么呢?
这就要谈到『SSL Pinning』技术。
App 可以自己检验 SSL 握手时服务端返回的证书是否合法,“SSL pinning” 技术说的就是在 App 中只信任固定的证书或者公钥。
因为在握手阶段服务端的证书必须返回给客户端,如果客户端在打包的时候,就把服务端证书放到本地,在握手校验证书的环节进行比较,服务端返回的证书和本地内置的证书一模一样,才发起网络请求。否则,直接断开连接,不可用。
当然,一般情况下,用这种技术也就能防止 HTTPS 信息被解密了。
不过,也还有其他的技术能够破解这种方法,比如 Android 下的一些 Hook 技术,具体而言就是绕过本地证书强校验的逻辑。感兴趣的同学可以抱着学习目的研究一下。不过据说这种方式需要对系统进行 Root、越狱等,需要一些更高权限的设置。
因此,也告诫我们,一定不要乱安装一些软件,稍不注意可能就中招,让自己在互联网上进行裸奔。一方面个人隐私信息等泄露,另外一个方面可能一些非常重要的如账户密码等也可能被窃取。
四、可能的监控手段有哪些?
办公电脑当然要接入公司网络,通过上面介绍的内容,你也应该知道,你在什么时候浏览了哪些网站,公司其实都是一清二楚的。
若自己的手机如果接入了公司网络也是一模一样(连 Agent 软件都不需要装)。这就提醒我们,私人上网尽量用自己的移动网络呀。
上面提到,如一些涉及隐私的敏感信息,如一些 PC 软件、手机 App 自己内部加密传输的话,内容加密(包括但不限于 HTTPS)不被破解也问题不大。
不过,这当然依赖这些软件设计者的水平了。比如同一个匿名用户对外展示的 ID 不能相同,如果是同一个的话也恰好暴露了逻辑漏洞。
当然,我们还是不要抱有侥幸心理,在监管的要求下,如果确实有一些违法等不恰当的言论等,始终还是有门路找到你的。
更何况,一般办公电脑都会预安装一些公司安全软件,至于这些软件究竟都干了些什么,有没有进行传说中悄悄截图什么的,这就因人(公司)而异了。(不讨论类似行为是否涉及到侵犯了员工隐私等问题)
参考技术A https是目前互联网中比较安全的一种信息传输方式,也是越来越受网民们的喜爱,因为它可以保障隐私数据在传输的过程中不被监听、窃取和篡改。首先客户端发起https请求:客户端会发送一个密文族给服务器端。(采用https协议的服务器必须要有一张SSL证书,因此是需要申请SSL证书的。)
然后服务器端进行配置:服务器端则会从这些密文族中,挑选出一个。
然后是传送证书:这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构、过期时间等等。
接下来客户端解析证书:客户端会验证公钥是否有效。
然后进行传送加密信息:传送证书加密后的随机值。
服务器端进行解密信息:服务器端利用私钥进行解密,得到了客户端传过来的随机值,然后把内容通过该值进行对称加密。
传输加密后的信息:服务器端用随机值加密后的信息,可以在客户端被还原。
最后客户端进行解密信息:客户端用之前生成的随机值解密服务端传送过来的信息,于是获取了解密后的内容。
整个过程配合的非常完美,第三方是无法插手干预的,这就保障了数据在传输过程中的安全。
以上是关于http和https什么关系?的主要内容,如果未能解决你的问题,请参考以下文章