发布时间:2026/8/29 20:23:06
操作系统应用开发(二十九)RustDesk错误修复——东方仙盟筑基期 CERTIFICATE_VERIFY_FAILED: certificate has expired(../../flutter/third_party/boringssl/src/ssl/handshake.cc:393))无法拉去通讯录和添加地址无法登录是sll到期更新证书即可错误栈原文CERTIFICATE_VERIFY_FAILED: certificate has expired(../../flutter/third_party/boringssl/src/ssl/handshake.cc:393)一证书位置文件路径flutter/third_party/boringssl/src/ssl/handshake.cc关键校验片段行 393 附近证书有效期校验逻辑// 执行对等方证书链校验 enum ssl_verify_result_t SSLHandshake::VerifyPeerCertificate() { bssl::UniquePtrX509_STORE_CTX ctx(X509_STORE_CTX_new()); if (!ctx) { return ssl_verify_internal_error; } X509_STORE_CTX_init(ctx.get(), ssl_ctx_-x509_store(), peer_cert_.get(), nullptr); // 传入完整证书链 for (const auto cert : peer_cert_chain_) { X509_STORE_CTX_set0_chain(ctx.get(), cert.get()); } // 核心校验入口校验证书有效期、签名、信任链、域名等 int verify_ret X509_verify_cert(ctx.get()); if (verify_ret 0) { int err X509_STORE_CTX_get_error(ctx.get()); // 错误分支证书过期 if (err X509_V_ERR_CERT_HAS_EXPIRED) { // 对应报错字符串输出CERTIFICATE_VERIFY_FAILED: certificate has expired ssl_-error_code_ SSL_ERROR_CERTIFICATE_VERIFY_FAILED; ssl_-error_string_ certificate has expired; // 报错输出点handshake.cc 393 行 return ssl_verify_cert_invalid; } // 其他证书错误未信任、域名不匹配、签名无效等 ssl_-error_code_ SSL_ERROR_CERTIFICATE_VERIFY_FAILED; ssl_-error_string_ X509_STORE_CTX_get_error_string(ctx.get()); return ssl_verify_cert_invalid; } // 额外域名校验 if (!CheckHostname(ctx.get())) { ssl_-error_code_ SSL_ERROR_CERTIFICATE_VERIFY_FAILED; ssl_-error_string_ hostname mismatch; return ssl_verify_cert_invalid; } return ssl_verify_ok; }关键常量说明// boringssl/include/openssl/x509_vfy.h #define X509_V_ERR_CERT_HAS_EXPIRED 10 /* 证书已过期 */当X509_verify_cert返回失败且错误码 10就抛出你看到的日志。二、RustDesk Flutter 上层封装代码触发 BoringSSL 调用逻辑RustDesk Flutter 网络层基于 DartHttpClient底层绑定 Flutter BoringSSL连接中继 / 控制服务器时触发 TLS 握手Dart 网络请求片段rustdesk_flutter/lib/services/network.dartimport dart:io; FutureSocket connectRustDeskRelay(String host, int port) async { try { // TLS加密连接底层走Flutter内置BoringSSL SecureSocket socket await SecureSocket.connect( host, port, // 未关闭证书校验时会触发BoringSSL证书校验逻辑 onBadCertificate: (X509Certificate cert) { // 默认返回false拒绝过期/无效证书抛出CERTIFICATE_VERIFY_FAILED return false; }, ); return socket; } on SocketException catch (e) { // 捕获BoringSSL底层抛出的证书错误 if (e.message.contains(CERTIFICATE_VERIFY_FAILED: certificate has expired)) { throw Exception(中继服务器SSL证书过期${e.message}); } rethrow; } }三、RustDesk Rust 后端原生 TLS 校验另一套触发同源错误代码RustDesk 核心服务端 / 桌面端使用rustls同样会报证书过期逻辑补充源码use rustls::{ClientConfig, RootCertStore, ServerName}; use std::net::TcpStream; use std::sync::Arc; fn tls_connect(host: str, port: u16) - Result(), Boxdyn std::error::Error { let mut root_store RootCertStore::empty(); root_store.add_server_trust_anchors(webpki_roots::TLS_SERVER_ROOTS.0.iter().map(|ta| { rustls::OwnedTrustAnchor::from_subject_spki_name_constraints( ta.subject, ta.spki, ta.name_constraints ) })); let config ClientConfig::builder() .with_safe_defaults() .with_root_certificates(root_store) .with_no_client_auth(); let tcp TcpStream::connect((host, port))?; let server_name ServerName::try_from(host).unwrap(); let conn rustls::ClientConnection::new(Arc::new(config), server_name)?; // TLS握手校验证书有效期 let mut tls_stream rustls::Stream::new(conn, tcp); tls_stream.flush()?; // 证书过期错误匹配 // rustls错误枚举Error::InvalidCertificate(CertificateError::Expired) Ok(()) }四、错误出现完整链路Flutter App 发起SecureSocket.connectTLS 连接 RustDesk 中继服务器Flutter 底层调用内置 BoringSSL 执行握手handshake.ccBoringSSL 调用X509_verify_cert校验证书时间证书notAfter时间早于设备当前系统时间 → 错误码X509_V_ERR_CERT_HAS_EXPIRED393 行分支赋值错误字符串向上抛出 SSL 校验失败异常Dart 层捕获 SocketException打印日志CERTIFICATE_VERIFY_FAILED: certificate has expired五、临时绕过校验代码测试用生产禁止Dart Flutter 绕过过期证书SecureSocket.connect( host, port, onBadCertificate: (cert) true, // 强制信任所有异常证书过期、自签 );Rust 后端绕过证书校验仅本地调试// 不安全配置跳过证书有效期校验 let config ClientConfig::builder() .with_custom_certificate_verifier(Arc::new(NoOpVerifier)) .with_no_client_auth(); struct NoOpVerifier; impl rustls::client::ServerCertVerifier for NoOpVerifier { fn verify_server_cert( self, _end_entity: rustls::Certificate, _intermediates: [rustls::Certificate], _server_name: ServerName, _scts: mut dyn IteratorItem [u8], _ocsp_response: [u8], _now: std::time::SystemTime ) - Resultrustls::client::ServerCertVerified, rustls::Error { Ok(rustls::client::ServerCertVerified::assertion()) } }六、根本修复方案服务端更新 RustDesk 中继 / 后台 SSL 证书重新签发有效证书客户端校准设备系统时间设备时间错乱会误判证书过期编译侧升级 Flutter 版本同步更新内置 BoringSSL 根证书库私有化部署替换自有有效 CA 证书关闭公共过期证书依赖人人皆为创造者共创方能共成长每个人都是使用者也是创造者是数字世界的消费者更是价值的生产者与分享者。在智能时代的浪潮里单打独斗的发展模式早已落幕唯有开放连接、创意共创、利益共享才能让个体价值汇聚成生态合力让技术与创意双向奔赴实现平台与伙伴的快速成长、共赢致远。原创永久分成共赴星辰大海原创创意共创、永久收益分成是东方仙盟始终坚守的核心理念。我们坚信每一份原创智慧都值得被尊重与回馈以永久分成锚定共创初心让创意者长期享有价值红利携手万千伙伴向着科技星辰大海笃定前行拥抱硅基 生命与数字智能交融的未来共筑跨越时代的数字文明共同体。东方仙盟拥抱知识开源共筑数字新生态在全球化与数字化浪潮中东方仙盟始终秉持开放协作、知识共享的理念积极拥抱开源技术与开放标准。我们相信唯有打破技术壁垒、汇聚全球智慧才能真正推动行业的可持续发展。开源赋能中小商户通过将前端异常检测、跨系统数据互联等核心能力开源化东方仙盟为全球中小商户提供了低成本、高可靠的技术解决方案让更多商家能够平等享受数字转型的红利。共建行业标准我们积极参与国际技术社区与全球开发者、合作伙伴共同制定开放协议 与技术规范推动跨境零售、文旅、餐饮等多业态的系统互联互通构建更加公平、高效的数字生态。知识普惠共促发展通过开源社区 、技术文档与培训体系东方仙盟致力于将前沿技术转化为可落地的行业实践赋能全球合作伙伴共同培育创新人才推动数字经济 的普惠式增长阿雪技术观在科技发展浪潮中我们不妨积极投身技术共享。不满足于做受益者更要主动担当贡献者 。无论是分享代码、撰写技术博客还是参与开源项目 维护改进每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地我们携手在此探索硅基 生命为科技进步添砖加瓦。Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Dont just be the one reaping all the benefits; step up and be a contributor too. Whether youre tossing out your code snippets , hammering out some tech blogs, or getting your hands dirty with maintaining and sprucing up open - source projects, every little thing you do might just end up being a massive force that pushes tech forward. And guess what? The Eastern FairyAlliance is this awesome place where we all come together. Were gonna team up and explore the whole silicon - based life thing, and in the process, well be fueling the growth of technology

相关新闻

2026/8/29 20:19:01

Agentic RAG:从检索增强生成到Agent推理循环

学AI大模型的正确顺序,千万不要搞错了 🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前! 有往AI方向发展,或者…

2026/8/26 18:38:29

Claude Tag与Agent Teams:团队AI编程协作实践指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 1. 先搞清楚Claude Tag和Claude Code到底解决什么问题 如果你在团队里用过AI编程助手,肯定遇到过这种情况:每…

2026/8/27 23:07:06

Higress学习

一、资料 Higress 官方文档 https://higress.io/

2026/8/29 20:22:47

Agent 的基本架构由哪些核心组件构成?

核心结论 (BLUF): AI Agent(人工智能智能体)的本质是以大语言模型(LLM)作为认知大脑(Brain),通过**规划(Planning)拆解复杂目标,借助记忆&#xf…

2026/8/29 20:22:47

Oracle数据库迁移至达梦数据库

目录 一、Oracle数据库配置 1、安装Oracle数据库 2、配置Oracle数据库实例 3、执行Oracle数据库SQL业务 4、Oracle信息确认 二、迁移前评估 1、启动DTS工具 2、配置评估对象 三、执行迁移 1、创建迁移节点 2、配置迁移数据源 3、配置迁移策略 4、选择迁移对象 5、…

2026/8/29 20:22:47

Meta叫停AI native计划:AI战略收缩期的技术栈与团队应对

Meta 被曝放弃 "AI native" 计划,还曾拟将部分团队裁员 60%。这大概是最近科技行业里信息量最大的一条组织调整新闻。消息最早来自海外科技媒体的爆料,Meta 官方并没有完整披露最终调整方案,所以“60%”这个数字不能直接当成已经落…

2026/8/29 20:22:47

Qwen3.8-Flash-Next解析:轻量快速推理与下一代架构创新

最近大模型圈子的命名越来越有意思了。从 Qwen、Qwen2、Qwen3 一路走到 Qwen3.8-Flash-Next,名字里的信息量其实比参数数字更大。Flash代表轻量快速推理路线,Next则暗示这不是简单的小版本迭代,而是提前吸收了下一代架构的设计思路。这篇文章…

2026/8/29 20:22:47

开发者视角,各云盘免费额度梳理

作为开发者,选云盘不能只看免费空间,还得看同步稳定性、API 支持、上传下载速度,以及批量备份脚本能不能跑顺。这篇文章从免费空间出发,横向对比移动云盘、百度网盘、夸克网盘在开发者场景下的表现。免费空间与基础能力对比项目移…

2026/8/28 16:16:17

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/28 16:16:21

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/28 16:16:22

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/29 0:01:10

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

一、设置环境变量etc目录下的profile.d文件目录 /etc/profile.d1、编写 vi test.sh文件内容# jdk变量 export ZHK_HOME/root export PATH$PATH:$ZHK_HOME/test # 可以取出来ZHK_HOME变量给ZZZ_HOME赋值 export ZZZ_HOME${ZHK_HOME}/test2、刷新 执行source /etc/profile 命令使…

2026/8/29 0:01:10

【JavaScript】内存管理-垃圾回收机制-内存泄露

内存管理 C 语言这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()。 而 JavaScript 是在创建变量(对象,字符串等)时自动进行了分配内存,并且在不使用它们时“自动”释放。释放的过程称为垃圾回收。 整…

2026/8/29 0:01:10

Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP 的目标是把 MCP(Model Context Protocol)能力延伸到真实嵌入式硬件实验室:AI Agent 通过一个标准化的 MCP Server,就能查看目标板状态、控制上电断电、复位开发板、读取串口日志,甚至执行镜像刷写。对于经…

2026/8/28 16:16:48

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/28 16:16:50

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/28 11:06:45

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…