Alpine Linux执行apk证书错误修正

在 Alpine Linux(以及大多数 Linux 发行版)中,如果系统时间与现实时间偏差过大,或者根证书(CA-Certificates)过期,APK 包管理器在尝试通过 HTTPS 连接镜像站时,会因为无法验证 SSL 证书的有效期而直接中断连接。由于连接中断,底层文件无法写入,从而抛出了权限错误(其实是文件流写入失败)

我是在我的 MacBook Air 13" Early 2014 安装Alpine Linux ,但是几个月没有使用(更新),现在执行 apk install flashrom 以及 apk update 都出现报错:

由于证书错误导致apk更新失败
SSL routines: tls_post_process_server_certificate:certificate verify failed:
ssl/statem/statem_clnt.c:2124: ERROR: 
dmidecode-3.6-r0: Permission denied 

这种情况下,首先要检查主机的时间是否出现偏差,利用 date 检查并使用 Alpine Linux运行chrony(NTP服务) 矫正时间。如果时间正确,但依然报错,则基本可以确认是长时间没有更新系统,导致系统使用的证书已经陈旧过期,已经无法连接更新服务器,因为更新服务器使用https连接也无法完成。

解决方法是暂时将软件仓库更新和连接改为 http 连接,先更新一把证书,在证书满足最新且正确情况下,就能够恢复之前的 https 连接:

修订仓库连接改为http
# 使用 --insecure 忽略 SSL 校验,先通过这种方式把最新的证书装上
apk add --no-cache --insecure ca-certificates
update-ca-certificates

# 另一种方式是直接修订仓库连接(如果仓库也同时允许http连接的话)
# 使用 sed 快速将所有 https 替换为 http
sed -i 's/https/http/g' /etc/apk/repositories
# 此时更新应该就不会报 SSL 错误了
apk update