HTTPS 证书验证机制全解析:为什么那个红色警告绝不能无视
免责声明本文仅用于网络安全技术学习。文中涉及的 openssl 命令、本地 HTTPS 测试均基于个人学习环境请勿在未备份数据的生产环境执行破坏性操作。公共网络环境下请勿点击 “继续前往” 忽略证书警告避免造成财产损失。摘要很多人把 HTTPS 简单理解为 “加密传输”却不清楚那个小锁图标到底锁住了什么也不明白为什么浏览器偶尔会弹出刺眼的红色警告。本文从一个机场免费 WiFi 的场景切入完整拆解 HTTPS 的安全目标、非对称与对称加密的分工、中间人攻击的原理、数字签名与 CA 证书体系的信任链、自签名证书为何不被信任并用 OpenSSL 实战命令直观验证证书状态最后总结公共网络环境下的安全实践与常见踩坑。读完本文你既能看懂浏览器证书警告背后的底层逻辑也能掌握用命令检查证书的可执行技能。引言那个红色警告不是浏览器在吓唬你想象一下这个场景你在机场候机连上了名为 “Free Airport WiFi” 的免费热点。正当你准备登录网银查看余额时浏览器突然弹出一个刺眼的红色全屏警告“您的连接不是私密连接”下方还有一行小字提示 “证书无效”。大多数人的第一反应是烦躁觉得是网络波动或者网站抽风。于是手指熟练地点击 “高级”然后毫不犹豫地选择 “继续前往”。就在你点击的那三秒里你可能刚刚把自己的账号密码、甚至转账验证码亲手交到了一个潜伏在 WiFi 里的 “影子” 手中。这并非危言耸听。对于非技术用户或刚入门的开发者来说理解 HTTPS 背后的握手机制和证书验证逻辑是保护数据隐私的第一道防线。今天我们就把这个过程彻底拆解开看看那个小锁图标到底锁住了什么以及为什么绝对不能无视浏览器的红色警告。一、先厘清基础HTTP、HTTPS 与加密的分类1.1 HTTP 的 “裸奔” 本质HTTPHyperText Transfer Protocol超文本传输协议是互联网最基础的传输协议但它默认是明文传输的。也就是说你在浏览器里输入的任何内容账号、密码、支付信息、聊天记录服务器返回给你的任何内容网页、Cookie、会话凭证都在网络链路上以明文形式传输。这意味着只要数据经过的任何一个节点路由器、交换机、无线热点、运营商的中间设备、攻击者架设的恶意热点被监控你的所有数据都会 “裸奔”。1.2 HTTPS在 HTTP 之上加了一把锁HTTPSHyperText Transfer Protocol Secure本质上是 HTTP TLSTransport Layer Security传输层安全协议。它通过 TLS 在 HTTP 之外包裹了一层加密通道解决三个核心安全目标机密性Confidentiality数据被加密中间人无法直接读取内容完整性Integrity数据在传输中如果被篡改接收方能检测出来身份认证Authentication确认你正在通信的对象确实是目标服务器而不是冒充者。其中第三点 “身份认证” 正是本文的主题也是浏览器红色警告的根源。1.3 对称加密与非对称加密的分工要理解 HTTPS必须先分清两类加密对称加密加密和解密使用同一把密钥。优点速度快适合加密大量数据缺点密钥如何安全传递如果直接发路上任何人都能抄录一份。非对称加密使用一对密钥 —— 公钥和私钥。公钥可以公开分发私钥必须保密用公钥加密的数据只能用私钥解密反之亦然优点解决密钥分发问题缺点速度慢不适合加密大量数据。HTTPS 的聪明之处在于用非对称加密来协商密钥用对称加密来加密实际数据。这就是 “握手” 阶段和 “数据传输” 阶段的区别。二、握手背后的 “盒子陷阱”HTTPS 的密钥协商2.1 用 “上锁盒子” 理解密钥协商我们可以把 HTTPS 的通信过程想象成寄送一个上锁的盒子。为了不让别人看到盒子里的内容数据客户端你的浏览器和服务器需要协商出一把唯一的钥匙对称加密密钥。但这把钥匙怎么传递呢如果直接发路上的任何人都能抄录一份。于是HTTPS 引入了非对称加密服务器先把自己的 “公钥” 发给客户端客户端用这个公钥把生成的随机钥匙 “锁进盒子” 发回去只有持有对应 “私钥” 的服务器才能打开盒子拿到钥匙。这解决了密钥分发的难题即使公钥和加密后的盒子被拦截中间人没有私钥也打不开盒子、拿不到里面的对称密钥。2.2 那个致命的漏洞公钥属于谁听起来很完美这里藏着一个巨大的漏洞你怎么确定收到的公钥真的属于目标服务器这就是**中间人攻击MITMMan-in-the-Middle**的切入点。攻击者不需要破解任何复杂的加密算法他只需要在你和服务器之间做一个 “二传手”当你向服务器请求公钥时攻击者截获请求把自己伪造的公钥发给你你毫不知情用攻击者的公钥加密了密钥并发送攻击者用自己的私钥解密拿到密钥再用真正的服务器公钥重新加密一份转发给服务器。在这个过程中你和服务器都以为自己在跟对方安全通信实际上所有的数据都在攻击者那里 “裸奔”。2.3 关键结论加密解决不了 “对方是谁”这是一个非常重要的认知HTTPS 的加密机制解决了 “内容不被偷看”但如果没有证书机制它根本解决不了 “对方是谁” 的问题。加密只是 “锁”锁住之后钥匙交给谁才是关键。如果钥匙交错了对象加密反而变成了 “帮攻击者保密”。三、数字签名与 CA互联网的身份身份证要堵住中间人攻击的漏洞必须确认公钥的归属权。这就引入了数字签名和CA 证书的概念。3.1 加密 vs 签名两个容易混淆的概念很多初学者容易混淆 “加密” 和 “签名”加密为了保密用接收方的公钥加密只有接收方私钥能解签名为了认证用发送方的私钥 “加密”只有发送方的公钥能 “解”用于证明 “消息确实来自我” 且 “未被篡改”。3.2 数字签名的原理数字签名的原理很简单发送方对消息做哈希运算得到摘要发送方用自己的私钥对摘要进行加密生成签名接收方用发送方的公钥解密签名得到摘要并与自己计算的摘要对比。如果一致就证明两点第一消息确实来自持有该私钥的人身份认证第二消息在传输中未被篡改完整性。3.3 CA 证书公钥的 “身份证”在 HTTPS 场景中服务器发来的公钥并不是 “裸奔” 的它附带了一个由第三方权威机构签发的数字证书。这个第三方就是CACertificate Authority证书颁发机构。CA 的角色类似于现实生活中的派出所户籍科当网站申请证书时CA 会严格验证其域名所有权甚至企业身份确认无误后用 CA 自己的私钥对网站的公钥及元信息进行签名生成证书。证书里通常包含网站的公钥网站域名证书有效期签发者CA信息CA 对以上内容的数字签名。3.4 证书链层层追溯的信任浏览器内置了一份受信任的根证书列表Trust Store。当你访问网站时浏览器会沿着证书链向上追溯验证服务器证书的签名是否由某个中间 CA 签发再验证中间 CA 的证书是否由更高级的 CA 签发一直追溯到某个直接内置在浏览器或操作系统中的根证书。如果能顺利追溯到受信任的根说明身份可信如果链条断了或者根证书不在信任列表中浏览器就会弹出那个红色的警告。证书链的本质把 “信不信任某个网站” 的问题转化为 “信不信任某个根 CA” 的问题。浏览器只信任有限的几个根 CA剩下的全部通过链式追溯来解决。四、自签名证书为何不被信任4.1 自签名证书的定义你可能会问“我自己生成的证书加密强度一样很高为什么浏览器不认”这就是自签名证书Self-Signed Certificate与受信任证书的本质区别。自签名证书的 “签发者” 和 “主体” 是同一个人 —— 也就是证书是自己给自己签的相当于你自己给自己写了一张身份证。4.2 为什么浏览器不信任它从数学加密的角度看自签名证书确实能实现加密传输但在信任体系上它无法证明 “你是你”。因为没有任何权威机构为它背书浏览器在自己的信任列表里找不到它的上级证书链于是只能判定为 “不可信”弹出红色警告。4.3 攻击者为什么只能提供自签名证书在公共 WiFi 环境下攻击者最容易做的就是搭建一个热点并为你访问的银行网站生成一张自签名证书。为什么攻击者不伪造一张正规 CA 签发的银行证书因为攻击者不可能通过正规 CA 的域名所有权验证银行域名显然不属于攻击者即使偷到一张合法证书一旦被发现会被吊销而且成本极高。所以攻击者只能提供自签名证书。此时浏览器的红色警告就是在告诉你“我找不到这张证书的上级担保机构它可能是伪造的。”如果你点击 ’ 继续前往 就等于主动关闭了这道最重要的防线允许中间人解密并窥探你的所有流量。4.4 自签名证书的合法用途当然自签名证书并非一无是处。它在以下场景是合理且常用的内网测试环境、开发环境个人搭建的实验室服务暂时性的内部工具。在这些场景下使用自签名证书没问题但前提是你知道并信任这个服务器本身且不是通过公共网络访问敏感信息。五、动手实战用 OpenSSL 看透证书真相光说不练假把式。我们可以使用OpenSSL工具来直观地验证一个网站的证书状态看看浏览器背后到底发生了什么。5.1 验证正常网站的证书在终端中运行以下命令连接任意一个正常网站例如 example.comopenssl s_client -connect example.com:443 -servername example.com 21 | grep Verify return code如果输出结果为Verify return code: 0 (ok)这说明证书链验证通过连接是安全的。说明-servername example.com用于启用 SNIServer Name Indication告诉服务器你访问的是哪个域名这是多证书共享一个 IP 时必需的。5.2 查看证书的完整信息如果不加 grep 过滤可以查看证书的完整信息openssl s_client -connect example.com:443 -servername example.com重点看这些字段subject证书主体网站域名issuer签发者哪个 CANot Before/Not After证书有效期Verify return code验证结果0 (ok)表示通过。5.3 验证自签名证书的报错现在尝试连接一个使用自签名证书的本地测试服务假设端口为 8443或者故意指定一个错误的 CA 路径openssl s_client -connect localhost:8443 -CApath /etc/ssl/certs 21 | grep verify error你很可能会看到类似这样的报错verify error:num19:self-signed certificate in certificate chain verify error:num18:self-signed certificate这里的num19明确指出了 “证书链中存在自签名证书”而你的系统信任库里没有它。这就是浏览器弹出红色警告的底层原因。5.4 动手生成一个自签名证书为了加深理解你可以自己生成一个自签名证书openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj /CNlocalhost然后用它启动一个临时 HTTPS 服务再用浏览器访问观察红色警告的出现。这个过程能让你直观理解加密强度很高但信任链是断的。六、TLS 握手的完整流程理解了证书我们再梳理 TLS 握手的完整流程以最常用的 TLS 1.2/1.3 为例ClientHello客户端发送支持的加密套件、TLS 版本、随机数等ServerHello服务器选定加密套件和版本返回自己的证书含公钥、随机数证书验证客户端沿着证书链验证服务器证书是否可信核心步骤密钥协商客户端用服务器公钥加密一个 “预主密钥”Pre-Master Secret发给服务器或者用 ECDHE 等密钥交换算法协商共享密钥双方生成会话密钥客户端和服务器各自用预主密钥 双方随机数推导出会话用的对称密钥完成握手双方用对称密钥加密 “Finished” 消息互相确认之后进入加密数据传输阶段。在 TLS 1.3 中握手轮次被进一步精简且默认强制使用前向保密Forward Secrecy安全性更高。6.1 前向保密Forward Secrecy一个值得了解的概念前向保密FS。它保证即使服务器私钥在未来某天泄露之前拦截到的加密流量也无法被回溯解密。传统 RSA 密钥交换一旦私钥泄露历史流量全暴露ECDHE前向保密每次会话使用临时密钥私钥泄露不影响历史会话。TLS 1.3 强制使用前向保密这也是为什么它更安全的原因之一。七、实战踩坑与最佳实践7.1 常见踩坑内网 HTTPS 服务用自签名证书浏览器疯狂报警这是最常见的坑。开发环境想省事用自签名结果团队每个人都要手动信任还容易误把警告当 “正常现象”。误把证书警告当网络故障直接点 “继续前往”这是最危险的习惯尤其在公共 WiFi 上等于主动放弃防御。证书过期未续期证书有有效期过期后服务不可用或浏览器报警很多企业因为忘记续期导致业务中断或用户恐慌。证书链不完整部署时只配置了服务器证书没配置中间证书链导致部分客户端验证失败。不理解 SNI一个 IP 多个证书时没有正确配置 SNI导致客户端拿到错误证书。7.2 最佳实践清单证书来源生产环境使用受信任的公共 CALet’s Encrypt、DigiCert 等签发的证书不要用自签名证书链完整部署时把服务器证书 中间证书链一起配置自动续期Let’s Encrypt 支持自动续期配好定时任务证书监控用工具监控证书过期时间提前续期私钥保护私钥文件权限收紧600严禁泄露到代码仓库、日志内网证书内网自建 CA 并把根证书推送到企业设备信任库避免内网 HTTPS 报警。八、公共网络环境下的安全实践回到开头的机场场景总结几条实用建议绝不点击 “继续前往”只要浏览器弹证书警告就停止输入任何敏感信息尤其是账号密码、银行卡、验证码警惕同名热点公共 WiFi 的名字可以随便取“Free WiFi”、“Airport WiFi” 都可能是钓鱼热点敏感操作用流量网银、支付、重要邮件尽量使用运营商 4G/5G 流量而不是公共 WiFi使用 VPN企业或可信 VPN 可以增加一层加密隧道确认小锁图标登录敏感站点前确认地址栏 HTTPS 锁图标正常没有警告别被 “安全网站” 迷惑钓鱼网站也能部署 HTTPS 证书锁图标只代表 “加密”不代表 “正规”。域名拼写、网址真实性仍需人工确认。结语回到文章开头的那个机场场景。如果当时理解了这套机制就不会点那个 “继续前往”。证书验证不是浏览器在小题大做也不是网络故障它是基于数学和协议构建的信任锚点正在帮你拦截一个看不见的中间人。互联网的信任体系并不完美但它比人类的直觉可靠得多。下次当浏览器再次亮起红灯请收起那份 “忽略警告” 的惯性那三秒的犹豫可能真的能救回你的财产安全。记住在公共网络环境中证书验证是防御中间人攻击的唯一且最有效的武器。了解网络安全首先要搞清楚下面这些前提网络安全到底包含哪些技术是否需要会编程网络安全行业有哪些职业方向“我”该如何选择网络安全的职业发展和成长路线是什么如果你是准备学习网络安全黑客或者正在学习下面这些你应该能用得上①网络安全学习路线②20份渗透测试电子书③安全攻防357页笔记④50份安全攻防面试指南⑤安全红队渗透工具包⑥网络安全必备书籍⑦100个漏洞实战案例⑧安全大厂内部视频资源⑨历年CTF夺旗赛题解析一、网络安全黑客学习路线网络安全黑客学习路线形成网络安全领域所有的知识点汇总它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。二、网络安全教程视频我们在看视频学习的时候不能光动眼动脑不动手比较科学的学习方法是在理解之后运用它们这时候练手项目就很适合了。三、网络安全CTF实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这里带来的是CTFSRC资料HW资料毕竟实战是检验真理的唯一标准嘛~四、网络安全面试题最后我们所有的作为都是为就业服务的所以关键的临门一脚就是咱们的面试题内容所以面试题板块是咱们不可或缺的部分这里我给大家准备的就是我在面试期间准备的资料。网安其实不难难的是坚持和相信自己我的经验是既然已经选定网安你就要相信它相信它能成为你日后进阶的高效渠道这样自己才会更有信念去学习才能在碰到困难的时候坚持下去。机会属于有准备的人这是一个实力的时代。人和人之间的差距不在于智商而在于如何利用业余时间只要你想学习什么时候开始都不晚不要担心这担心那你只需努力剩下的交给时间这份完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关新闻

Docker 镜像分层原理解密:从 bootfs、rootfs 到 Overlay2 的 “千层饼“ 之旅

Docker 镜像分层原理解密:从 bootfs、rootfs 到 Overlay2 的 “千层饼“ 之旅

🔒免责声明:本文涉及的所有 Linux 命令、overlay 挂载实验均基于个人学习环境,执行需 root 权限。请勿在未备份数据的生产服务器上直接复制命令操作,避免造成数据丢失或系统故障。摘要 很多初学者把 Docker 镜像理解成一个 “打包…

2026/10/14 11:08:17 阅读更多 →
书香校园评选活动全流程,投票一键导出参赛资料

书香校园评选活动全流程,投票一键导出参赛资料

书香校园评选的关键,在于让阅读成果“被看见、被记录、被认可”。用人人微投票,从创建活动到导出参赛资料,全程零代码、免费使用,手机电脑都能操作。📚 第一步:准备工作与进入平台建议用电脑端操作&#xf…

2026/10/14 11:08:17 阅读更多 →
户外检测光伏组件,便携式IV测试仪有哪些应用优势?

户外检测光伏组件,便携式IV测试仪有哪些应用优势?

做过光伏现场检测的人都清楚,户外作业难点十分突出。光照飘忽不定、环境温度实时波动,再加上屋顶、山地等现场条件受限,传统检测设备很难发挥作用。以往依靠万用表、人工估算、后台数据对比的检测方式,不仅数据片面、效率低下&…

2026/10/14 11:08:17 阅读更多 →

最新新闻

48V输入LDO稳压芯片方案:PW8600 80V耐压/70V宽压/1.8μA低功耗电路详解

48V输入LDO稳压芯片方案:PW8600 80V耐压/70V宽压/1.8μA低功耗电路详解

LDO 稳压芯片 选型助手 面向硬件工程师与电子研发人员,通过输入电压 / 输出电压快速匹配合适的 LDO 型号, 并提供完整参数查阅、外围器件建议与型号清单,让选型一步到位。 传统 LDO 耐压不足 5V/6V LDO 无法直连 24V/36V/48V 总线&#xff0c…

2026/10/14 21:37:29 阅读更多 →
零依赖单测:用Node内置测试运行器替代Mocha、Chai与Sinon

零依赖单测:用Node内置测试运行器替代Mocha、Chai与Sinon

我最近接手一个老服务,第一件事不是看业务代码,而是先摸一遍它的测试链路:Mocha 负责跑,Chai 管断言,Sinon 做 mock,再加一个 nyc 统计覆盖率。功能倒是都能满足,但每次新同事 clone 项目光装依…

2026/10/14 21:37:29 阅读更多 →
UE4塔防开发实战:士兵AI、塔防调度与伤害结算管线

UE4塔防开发实战:士兵AI、塔防调度与伤害结算管线

简介:这是一份基于Unreal Engine 4.22开发的3D塔防游戏完整工程,面向希望学习UE4游戏开发、塔防玩法实现与C编程的开发者,尤其适合具备一定引擎基础、想通过实战项目理解RTS与塔防机制的中级学习者。资源以zip压缩包形式提供,整体…

2026/10/14 21:37:29 阅读更多 →
dig_cli鸿蒙化适配:从DNS报文到内网域名治理的完整实践

dig_cli鸿蒙化适配:从DNS报文到内网域名治理的完整实践

1. 先说结论:为什么我要做 dig_cli 的鸿蒙化适配今年有一个项目,要在鸿蒙生态里做一个面向内部网络管理场景的域名解析诊断工具。需求本身很朴素:管理员输入一个域名,工具能快速给出权威解析结果、响应延迟分布、不同记录类型的查…

2026/10/14 21:37:29 阅读更多 →
SpringBoot+Redis+硬件项目启动报错排查与避坑指南

SpringBoot+Redis+硬件项目启动报错排查与避坑指南

接手带硬件对接的SpringBoot项目,启动时报错,这大概是后端开发里最磨人的场景之一。尤其是应用里同时压着Redis、网关路由、硬件设备初始化三块内容的时候,启动失败的原因往往不是某个单点组件坏了,而是链路耦合出的连锁问题&…

2026/10/14 21:37:29 阅读更多 →
基于Flutter与OpenHarmony的油耗追踪App开发实践

基于Flutter与OpenHarmony的油耗追踪App开发实践

最近在整理加油小票的时候我突然意识到一个问题:我根本不知道自己这台车的真实油耗是多少。仪表盘上那个瞬时油耗和表显平均油耗,短期看看还行,时间一长就会发现它跟实际开销对不上——特别是冬天冷启动、夏天开空调、周末跑高速这几类场景混…

2026/10/14 21:36:28 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →