操作系统应用开发(二十九)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

相关新闻

JetCache 本地+远程缓存一致性完整指南

JetCache 本地+远程缓存一致性完整指南

一、前置基础:JetCache 多级缓存模型 要理解一致性问题,首先要明确 JetCache BOTH 模式的底层结构:它是两级缓存组合(MultiLevelCache),并非单一存储: L1(本地缓存)&…

2026/7/10 1:40:00 阅读更多 →
霍普金斯大学与StepFun联手,打造能真正“看懂“图片的AI评估标准

霍普金斯大学与StepFun联手,打造能真正“看懂“图片的AI评估标准

这项由约翰斯霍普金斯大学、清华大学与StepFun(阶跃星辰)联合完成的研究,发表于2026年第43届国际机器学习大会(ICML 2026),会议地点为韩国首尔,论文收录于PMLR第306卷。感兴趣的读者可通过论文编…

2026/7/10 1:40:00 阅读更多 →
运算放大器测温电路Multisim仿真问题解析与工程实践

运算放大器测温电路Multisim仿真问题解析与工程实践

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在整理模拟电子技术课设资料时,发现很多同学在运算放大器测温电路仿真中遇到了一个典型问题:电路图看起来…

2026/7/10 1:38:00 阅读更多 →

最新新闻

应用密码学中的ASCII:从字符编码到加密基石

应用密码学中的ASCII:从字符编码到加密基石

引言在应用密码学的世界里,我们谈论的是如何保护信息的机密性、完整性和真实性。但一个最基础却容易被忽视的问题是:信息在计算机中究竟是以什么形式存在的?答案就是二进制。计算机底层硬件只能识别0和1两个数字,而我们日常使用的…

2026/7/10 2:26:10 阅读更多 →
PS2遥控小车硬件选型对比:L298N vs HW-166 驱动模块在12V/5V系统下的3项关键测试

PS2遥控小车硬件选型对比:L298N vs HW-166 驱动模块在12V/5V系统下的3项关键测试

PS2遥控小车硬件选型深度评测:L298N与HW-166驱动模块的12V/5V系统实战对比在STM32遥控小车项目中,电机驱动模块的选型直接影响着小车的动力性能、续航时间和控制精度。面对市场上众多的驱动模块选项,L298N和HW-166是最常见的两种选择。本文将…

2026/7/10 2:26:10 阅读更多 →
计算机大数据毕设实战-基于 Django 的音乐点播数据可视化管理系统的设计与实现 基于 Django 的热门音乐榜单挖掘分析系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

计算机大数据毕设实战-基于 Django 的音乐点播数据可视化管理系统的设计与实现 基于 Django 的热门音乐榜单挖掘分析系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/10 2:22:09 阅读更多 →
AI赋能数据治理:从元数据管理到质量管控的实战路径

AI赋能数据治理:从元数据管理到质量管控的实战路径

1. 项目概述:当数据治理遇上AI,一场效率革命数据治理,这个听起来有点“古板”和“流程化”的领域,正在被AI技术悄然重塑。过去,我们谈数据治理,脑海里浮现的往往是成堆的文档、复杂的血缘关系图、永无止境的…

2026/7/10 2:22:09 阅读更多 →
千万别乱译!日本护照翻译正确办理方式、收费及避坑大全

千万别乱译!日本护照翻译正确办理方式、收费及避坑大全

内容摘要:日本护照翻译可可通过线上正规小程序办理,只需上传护照材料,填写需求、在线缴费,完成后即可获取电子翻译件,需要纸质版可直接邮寄到家。线下需前往实体翻译门店现场办理,翻译完成可再次前往店铺领…

2026/7/10 2:18:08 阅读更多 →
AI函数调用:Function Calling从理论到实战全解析

AI函数调用:Function Calling从理论到实战全解析

📌 前言 随着大语言模型(LLM)的快速发展,我们发现纯文本对话模式下的 AI 存在明显的能力边界:它不知道今天的天气、查不到实时股价、算不出复杂的数学公式、更操作不了你电脑上的文件。 Function Calling&#xff08…

2026/7/10 2:18:08 阅读更多 →

日新闻

STM32与LTC1864高精度ADC的SPI通信实现

STM32与LTC1864高精度ADC的SPI通信实现

1. 项目背景与核心需求在工业控制和嵌入式系统开发中,模拟信号与数字系统的无缝集成一直是工程师面临的关键挑战。LTC1864作为一款16位高精度ADC转换器,配合STM32F101ZG这类主流微控制器,能够构建高性能的模拟信号采集系统。这种组合特别适合…

2026/7/10 0:03:07 阅读更多 →
猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件:浏览器资源嗅探与视频下载的终极解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页视频无法下载而烦恼吗&am…

2026/7/10 0:05:09 阅读更多 →
直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

1. 直流有刷电机驱动方案概述在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便、成本低廉等优势,仍然是许多应用场景的首选驱动方案。TC78H653FTG作为东芝推出的新一代H桥驱动器,与MKV46F256VLH16微控制器配合使用&#xff0c…

2026/7/10 0:05:09 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻