为什么https是安全的?
申请了一个免费的ssl证书,现在可以通过https来安全访问自己的小网站啦。高兴之余,我忽然好奇为什么有了ssl证书就能保证网络访问是安全的了呢?以前只知道网页都是通过http协议来传输的,且http协议是明文传输,所以很容易被其他人截获和破解,所以浏览器直接访问http时,往往会报危险警告,如果有了ssl证书,那么访问时网站就会自动变成安全的https
,下面就来探究一番。
什么是http协议#
http是一类用于获取HTML文档这种资源的应用层协议,是客户端与服务器之间通讯的标准协议。客户端与服务器之间按照http协议的格式交换一个个的独立的消息,其中,客户端发给服务器的报文称作请求,服务器发送给客户端的报文称作应答,通过这样不断的互相发送报文的过程,实现了日常访问网站的操作。
GET \ HTTP/1.1
Host: www.bing.com
User-Agent: xxx
Accept-Charset: utf-8
<!DOCTYPE html><html>...</html>
一个请求报文大体上如此,首行称为请求行,由三部分组成,第一个是请求方法,第二个是请求路径,第三个是协议的版本。
然后从第二行开始是请求头部,设置了地址啦、使用的软件啦、接受的字符集啦之类的内容,然后空一行,之后的内容就是具体的消息体,一般传输的是html文本。
HTTP/1.1 200 OK
Content-type:text/html
<!DOCTYPE html><html>...</html>
响应报文也类似,第一行是响应行,包括协议版本,然后是响应码和响应的结果。
第二行开始直到空行和请求报文类似内容,是响应报文的头部内容。空一行之后是返回的响应的具体信息。
可以看到,http的请求和响应报文在网络的传输过程中都是直接通过类文本的形式传递的,那么如果有有心之人,就可以通过监听或截获的方式,很轻松的就能够获取到你在网络中发送的内容,甚至将你的内容截留并伪造一份数据代替你原本的报文发送出去。这显然完全没有安全性可言。
提高安全性#
这个时候就有人想到了,既然不能明文传输,那将报文加密不就好了嘛。于是你使用了一种对称加密的方式(AES加密),每次在双方第一次发送数据的时候,都先发送一个密码本,之后发送的报文都是按照这个密码本来加密的,收到报文之后再按照这个密码本解密就能得到原本的内容了。其他人再在传输过程中监听报文,就只能得到一串乱码,这确实提高了安全性,但是不可避免的是密码本的传输过程仍然是明文的形式,只要有心之人足够耐心或者运气足够好,在你第一次传输http时就监听到并获取到了你的密码本,那么加密的动作也将是徒劳的。
那么有没有什么办法可以避免传输密码本,或者不让中间人可以通过密码本来伪造我的传输报文呢?答案是使用非对称加密,例如RAS算法,这种算法是生成一个公钥和一个私钥,公钥可以在网络中分发,这样对方就能解析我发送的加密的报文了,而私钥只保存在本地,用于加密要发送的报文。就算有中间人截获了我的信息,因为他只有我分发的公钥而没有私钥,所以就算他解析了我的报文也只能看一下,而不能伪造我的消息。
看起来似乎已经足够安全了,但是天底下没有绝对的事情。既然不能伪造数据,中间人又想到了一种破解办法:不能伪造你的数据,直接冒充成你。当客户端和服务端通讯时,服务端会将自己的公钥交给客户端,客户端也会将自己生成的公钥交给服务端,而我化身中间的第三者,一直监听着双方的通讯,自然而言地,我也就拿到了双方的公钥,这意味我可以解析客户端和服务端发送给对方的报文。这时候,我也会生成自己的公钥和私钥,当监听到客户端发送给服务端的公钥时,就保存下来,并且替换成自己的公钥发送给服务端,同样地,也保存下来服务端的公钥替换成自己的公钥发送给客户端。于是客户端和服务端都以为自己在和真正的对方通信,实际上全都是交给我这个第三者,并由我来进行转发,那我就可以在其中修修改改,搞搞破坏啦。这一切只要网络足够通畅,能够比客户端发送给服务端的报文早一步到达服务端,就能直接顶替掉真正的报文,达到狸猫换太子的效果,反之亦然。
https#
似乎很无解啊,如果中间人的假报文总是早一步到达服务器,那么服务器永远也不可能收到真正的报文。千呼万唤始出来,这个时候就需要https登场了。https实际上是SSL+HTTP的简称,现在的SSL基本上也被TLS取代了,不过习惯上还是称其为SSL。
SSL证书也是一种上述提到的非对称加密方法。当客户端发送建立连接的请求时,服务器会将SSL证书发送到客户端手中,客户端验证SSL证书有效后,再生成客户端的公钥,并通过SSL证书的公钥进行加密,发送给服务端,然后就可以通过生成的公私钥来加密通讯了。
看起来和上述伪造公私钥的方式差不多,只不过是换成了SSL证书。没错,而这正是关键所在。所有SSL证书都是需要在CA体系中由权威机构来颁发的,而权威机构的CA证书都已经在操作系统中内置了,称为CA根证书
。通俗的讲就是,原本是什么臭鱼烂虾都可以在网络中发布密钥,而现在必须是有名有姓的权威机构的证书才会被正确识别并采纳为通讯的密钥,于是那些想伪造密钥的人,因为密钥无法通过CA的认证,就会被无情的抛弃掉,再也不能从中做坏事了。
一句话总结为什么https是安全的,除了非对称算法的原因外,还因为分发的密钥有权威机构做背书。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)