ReliefMail 证书与连接排查¶
添加普通邮箱时,账户“高级”页的“自定义 CA 文件(可选)”留空。
ReliefMail 使用 /etc/ssl/certs/ca-certificates.crt,并校验服务器证书链、域名和有效期。
企业或自建邮箱的私有 CA 文件由管理员提供,按账户单独选择。
修复或更新系统证书¶
账户“高级”页提供“修复或更新系统证书”。使用默认 CA 的连接测试遇到证书库加载 失败或信任链错误时,也可从错误对话框进入修复。
该入口启动 reliefapk --repair-ca:
检查证书恢复条件;系统 CA 可用时,在线模拟固定证书包的变更。 恢复计划会说明两个 CA 包的 world 请求将刷新为不带版本或仓库标签约束的包名; 使用已配置的默认签名仓库,其他请求保留。
在 ReliefAPK 中检查变更并应用,使用其现有 sudo/root 密码认证。
系统 CA 不可用时,先原子恢复随系统分发的证书库,将原有常规文件保留为 权限
0600的独立备份。随后才进行在线包可用性检查和真实 apk 模拟。apk 使用已配置的软件源和包签名验证获取固定的
ca-certificates与ca-certificates-bundle软件包。先用add --upgrade更新 两个请求及其版本,再用fix --reinstall修复源文件和生成文件。每次真实变更前 均重新模拟,依赖仍由 apk 求解。HTTPS 源必须通过 TLS 证书验证;管理员配置的本地或 HTTP 源也必须通过 apk 签名验证。安装后重新解析证书库;文件仍不可用、新生成
.apk-new或 apk 报告APK unavailable, skipped时报告失败,不把退出码 0 当作实际执行的充分证据。返回 ReliefMail,重新输入测试所需的邮箱授权码并测试连接。
证书修复不会发送邮件。邮箱密码与系统提权密码分别由两个程序处理,不通过启动 参数传递。账户已指定私有 CA 时,应检查该文件,不会自动替换为公共 CA。
下载使用当前有效的系统证书库;文件缺失或损坏时,使用随 ReliefOS 分发、
由 root 管理的 /usr/share/reliefos/certs/ca-certificates.crt 恢复系统证书库。
恢复文件及其父目录必须由 root 拥有、不可由组或其他用户写入,且不能是符号链接。
预览阶段说明恢复计划,不修改系统证书。经认证应用后才恢复文件并进行在线模拟;
恢复后的网络或签名检查失败时保留已恢复的出厂 CA,并明确报告更新失败。
预览与实际修复禁用磁盘缓存;检查包可用性时仅请求元数据,不下载归档。
固定修复工作程序启动 apk 时使用独立的最小环境,忽略调用者的 APK_CONFIG、代理和 TLS
环境变量,也不加载全局 /etc/apk/config,防止配置关闭签名或证书验证。
APK 输出中的仓库 URL 会隐藏,避免将可能包含的仓库凭据写入操作日志。
软件源、签名密钥与架构仍使用系统配置;仅依靠环境变量配置代理的网络需要管理员
先提供可直接访问的软件源。
邮箱连接仍按账户配置验证。apk 当前下载库优先读取编译时指定的 CA 文件,
恢复过程直接修复该系统文件,不依赖环境变量覆盖该路径。
在线操作前和安装后均检查系统 CA 文件及其父目录的信任条件。即使 PEM 可以解析,
符号链接、非 root 属主或组/其他用户可写的路径也会被拒绝。管理员应先核对来源,
恢复 root 拥有的常规文件和安全权限;程序不会把这种文件直接用作特权下载的信任锚。
reliefos-trust 同时提供恢复证书库和
/etc/apk/protected_paths.d/reliefos-ca-bundle.list。apk 3 的文件替换保护按目录生效;
该规则把 /etc/ssl/certs 作为生成的证书输出目录,允许签名证书包替换损坏的已安装
文件,避免仅生成 .apk-new 而留下错误文件。私有 CA 源文件宜保存在
/usr/local/share/ca-certificates,账户专用文件可放在其他适当目录。
更新已有系统时,应同步更新 ReliefMail、ReliefAPK 和系统信任包/配置。仅复制新程序
到旧镜像,可能缺少恢复证书文件或 apk 保护规则;应检查安装日志及 .apk-new。
自定义保护策略仍需由管理员合并;修复程序会检查最终证书文件是否可解析。
不能只更新汇总包: Alpine 的安装钩子 会执行 update-ca-certificates,按源文件
重新生成证书库。仅替换汇总文件可能被旧源集合覆盖;所以修复流程同步维护两个包,
并移除它们在旧镜像中遗留的精确 world 约束,允许后续安全更新。
按实际原因处理¶
提示:系统 CA 文件不可用; 应检查的内容:文件是否存在、可读、完整,必要时使用修复入口。
提示:自定义 CA 文件不可用; 应检查的内容:文件路径、权限和 PEM 内容,或留空使用系统证书。
提示:服务器证书链不受信任; 应检查的内容:服务器地址、中间证书链、私有 CA 选择,以及系统根证书是否需要更新。
提示:证书已过期或尚未生效; 应检查的内容:系统日期、时间和服务器证书有效期。
提示:域名不匹配; 应检查的内容:IMAP/SMTP 主机名与服务器证书是否相符。
提示:TLS 协商失败; 应检查的内容:端口、隐式 TLS/STARTTLS 选择、网络状态与双方协议支持。
CA 包中部分证书无法解析时,只要有可用根证书,程序会继续用这些根验证服务器; 服务器身份、有效期和信任链校验仍为必需。全部证书不可用时拒绝连接。 诊断保留失败阶段、TLS 返回码、校验标志和系统时间,便于区分原因。
定向验证¶
TMPDIR="$PWD/out/tmp" sh tests/build/test-reliefmail.sh protocol
TMPDIR="$PWD/out/tmp" sh tests/build/test-reliefmail.sh worker
TMPDIR="$PWD/out/tmp" sh tests/build/test-reliefapk-model.sh
TMPDIR="$PWD/out/tmp" sh tests/build/test-reliefapk-certificates.sh
TMPDIR="$PWD/out/tmp" sh tests/build/test-reliefapk-process.sh
TMPDIR="$PWD/out/tmp" python3 tools/tests/test_reliefapk_apk.py \
--apk out/xorg-vmware-debug/upstream/apk/apk.static
TMPDIR="$PWD/out/tmp" make O=out/xorg-vmware-debug PROFILE=debug -j4 \
app-reliefmail app-reliefapk nls image-vmdk
QEMU 工具 tools/test_reliefmail_ca_qemu.py 使用独立磁盘副本及临时签名仓库,
测试 CA 损坏后的可见错误与修复流程。测试 CA、仓库密钥和账户均为夹具,
不会安装到宿主系统或生产输入镜像中。