http和https有什么区别?浏览器提示"不安全"要不要理,我抓了个包,明文里连服务器版本都看得一清二楚

事情的起因是媳妇在外地想登家里的NAS下点照片,网页弹出一整页红色警告,「您的连接不是私密连接」,她截图发我:咱家NAS是不是被黑了?我看了眼就乐了,那是自己签给自己的证书,浏览器不认识而已,点高级继续访问就行。但她不放心,非问我这警告到底什么时候该理、什么时候不用理,我被问住了——这事我天天见,还真没从头想过。当天晚上我拿python写了个十几行的抓包小脚本,把http和https各连了一遍,看完输出才明白浏览器那把小锁到底锁的是什么。
先抓个包看看:80端口全裸,443端口全是乱码
别管书上怎么定义,动手连一次比看十篇科普都清楚。我用python的socket,也就是最原始的裸连接,先连一个http网站的80端口,手工发一条最简单的GET请求。返回的东西直接打印在屏幕上,长这样:
HTTP/1.1 403 Forbidden / Date: Sat, 03 Oct 2026 / Server: Apache/2.4.68 / Content-Type: text/html
注意看,这一来一回全是人话。服务器用什么软件、什么版本、几点几分的、返回什么类型的页面,路上的每一个设备都能原样读到。这还只是个没有账号的普通页面,如果这是一个http的登录页,你敲下去的账号密码就会以同样的明文,一路从你家路由器、光猫、运营商机房、再到对方服务器,全程裸奔。哪一段路上有人想看,抓个包就全有了。
然后我把同样的裸连接对准443端口,就是https用的那个口。这回不管我发什么,对方只回了我五个字节:\x15\x03\x03\x00\x02\x02。这不是乱码出错了,这是TLS协议在跟我说「你握手不对,重来」。从这一刻起,双方说的每一句正经话都得先套上一层加密,路上抓到的包全是这种没头没尾的字节。同一个网站,80和443两个门,一个敞着大门聊天,一个先对暗号再关门,这就是http和https最根本的区别。
那把小锁锁的是什么:三件事,缺一件都不算数
地址栏那把小锁不是只管「加密」一个词,它一次干了三件事。第一是加密,偷看不了,路上抓包只能看到乱码,账号密码和聊天内容都在里面;第二是完整性,改不了,数据在半路哪怕被人动了半个字节,接收方一验就知道,直接丢弃;第三是身份,没冒充,你连的是shunot.com,就有第三方出来担保这真是shunot.com的服务器,不是隔壁黑客搭的一模一样的假页面。
第三件事靠的就是证书。证书好比一封有公证处盖章的介绍信,上面写着这个域名是谁的、什么时候到期、由谁担保。我用curl的verbose模式看了眼自己这个站的证书,输出很能说明问题:SSL connection using TLSv1.3 / subject: CN=shunot.com / issuer: Let's Encrypt。翻译过来:加密用的TLS 1.3,域名是shunot.com,担保人是Let's Encrypt这家公共证书机构。浏览器认识Let's Encrypt,所以不弹警告。
顺带说一句,早年上https得花钱买证书,现在Let's Encrypt这类机构免费发,三年自动续,所以你在网上看到的正经网站基本全员https了。剩下还顶着http的,多半是路由器后台这种「只在自己家转悠」的页面,这就引出下面的问题。
浏览器提示"不安全",三种情况三种对待
搞清楚小锁锁的是什么,就能给各种提示分诊了。我给媳妇列了张表,三种情况三种态度:
| 情况 | 典型场景 | 要不要理 |
| 内网http页面 | 192.168.1.1路由器后台、光猫后台 | 基本不用理 |
| 公网http登录页 | 网址以http开头的账号登录页 | 坚决别输密码 |
| 证书告警页 | NAS、路由器的https后台弹红字 | 确认是自己设备再继续 |
先说第一种,为什么路由器后台是http我照样用得心安理得。192.168.1.1这个地址根本不出门,数据只在你家WiFi和路由器之间走两米网线,中间没有运营商没有公网。想截这段明文,人得先混进你家网络,而能蹭进你家WiFi的人,改你路由器设置都不用抓包,直接登后台就行。所以风险根本不在「明文」上。WiFi密码那把锁我在WPA2和WPA3那篇写透过,那是管无线这段路的,跟https管的是两段不同的路。
第二种就没得商量了。凡是http开头的页面要你输账号密码,等于把密码写在明信片上寄出去。更阴的是运营商或者公共WiFi往http页面里塞广告,页面莫名多了弹窗,我在路由器被黑那篇里写过怎么排查,本质都是明文页面谁都能改两笔。酒店的WiFi、商场免费网里尤其别碰http登录页。
NAS那种吓人的红字告警,为什么能点"继续访问"
第三种是媳妇遇到的那种,也是最容易吓着人的。你的NAS、路由器开https后台时,证书多数是设备「自己签给自己的」,介绍信是自己写的、章也是自己刻的,浏览器不认识这个担保人,就弹整页红字。这不一定代表被黑,只代表「没人替这台设备背书」。
判断方法就一条:确认你连的确实是自己那台设备,且网络环境是你信得过的。在家里的WiFi下,输入的是NAS的内网地址,红字里写的是自签证书、证书过期之类,那放心点高级、继续访问。反过来,在酒店网络、陌生WiFi下访问任何远程设备弹证书错误,或者红字里说「证书不属于此域名」「证书由未知机构签发但你以为该是大厂」,别点继续,先换成手机流量再试。我之前写WebDAV怎么开那篇提过一嘴:群晖的加密端口5006配手机文件App,第一次连接手机也会嘟囔两句,信任一次就记住了,是同一回事。
所以媳妇那次,我远程指挥她核对了两样:红字里写的服务器名是不是咱家NAS的,她连的是不是咱家宽带。都对,点继续,完事。她说吓死我了,我说这红字拦的就是「你没核对就敢往下走」的人,设计初衷是好的。
反过来:为什么输192.168.1.1会被强跳https然后打不开
还有个反向的坑也顺便说清。有人浏览器里输192.168.1.1,被自动改成https://192.168.1.1,然后路由器后台死活打不开,白屏转圈。因为路由器后台压根只开了http这扇门,浏览器凭记忆给你升级到https,等于敲错了门还怪人家不开。这跟设备坏不坏没关系,处理办法是地址敲全,带上 http:// 前缀再回车,手机浏览器爱干这事,我在手机登录路由器后台那篇记过这个坑。要是怎么敲都还跳,换个浏览器或者清一下这个站点的数据,浏览器记的「该站必须https」就作废了,登录页打不开那篇有完整的排查顺序。
家里哪些门该上锁,哪些无所谓:输密码前停两秒
落到自己家,我给所有联网设备的后台分了两档。必须https的:从公网能摸进来的那些,NAS远程后台、路由器的远程管理页、监控的远程页面。这些是真正的「明信片出远门」,一旦走http,密码就是在公网裸奔,而且这类后台一个密码就能进全部数据,我在NAS防勒索那篇里写过公网暴露的下场。设备本身不支持https的,就别把它的后台直接暴露到公网,要么走VPN回家那条路,要么干脆关掉远程。无所谓http的:只在自家内网转的后台,路由器、光猫、打印机,把后台密码设好就行,明文那点风险排在密码还是admin后面八条街。
再养成一个两秒钟的习惯:在任何页面输密码之前,瞄一眼地址栏开头。https开头、锁是闭合的,输;http开头的登录页,停;红字告警页,先确认连的是谁再决定。这个习惯不花一分钱,比任何安全软件都管用。顺手再查一眼路由器后台有没有不认识的端口映射,那是另一扇容易忘关的门,我在UPnP那篇里专门写过。门都看住了,明文的裸奔的冒充的,全都进不来。

发表评论