无法从 18.10 升级到 19.04“无法验证 changelogs.ubuntu.com 的证书”

无法从 18.10 升级到 19.04“无法验证 changelogs.ubuntu.com 的证书”

我无法从 Ubuntu 18.10 升级到 19.04。

我确认 19.04 已正式发布,并出现在https://changelogs.ubuntu.com/meta-release

当我运行时sudo update-manager -c,我在终端中收到以下错误消息(尽管 GUI 只是高兴地报告没有可用的更新):

无法连接到https://changelogs.ubuntu.com/meta-release. 检查您的互联网连接或代理设置

我尝试使用访问该文件wget changelogs.ubuntu.com/meta-release 并收到以下错误消息

--2019-04-20 21:01:27-- https://changelogs.ubuntu.com/meta-release 正在解析 changelogs.ubuntu.com (changelogs.ubuntu.com)...91.189.95.15,2001:67c:1560:8008::11

连接到 changelogs.ubuntu.com (changelogs.ubuntu.com)|91.189.95.15|:443... 已连接。

错误:无法验证 changelogs.ubuntu.com 的证书,由“CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US”颁发:无法在本地验证颁发者的权限。

要以不安全的方式连接到 changelogs.ubuntu.com,请使用“--no-check-certificate”。

但当我尝试使用 访问同一个文件时curl changelogs.ubuntu.com/meta-release,下载成功了(我读到某处说它的证书可能更为最新)。

正如我看到的建议,我多次重新启动系统,等待了超过 24 小时,并尝试删除本地~/.cache/update-manager-core/meta-release,但这没有帮助。

我已验证该网站的证书https://www.ssllabs.com/ssltest/analyze.html?d=changelogs.ubuntu.com&latest并获得了 A+。

我更喜欢不需要我通过 http 而不是 https 获取文件的解决方案。

答案1

以下是我解决问题的方法:

我使用 curl: 通过 https 下载了元发布文件curl http://changelogs.ubuntu.com/meta-release > ~/.cache/update-manager-core/meta-release

然后我将本地编辑/etc/update-manager/meta-release为:

# default location for the meta-release file

[METARELEASE]
#URI = https://changelogs.ubuntu.com/meta-release
URI = file:///home/YOUR-USERNAME/.cache/update-manager-core/meta-release
URI_LTS = https://changelogs.ubuntu.com/meta-release-lts
URI_UNSTABLE_POSTFIX = -development
URI_PROPOSED_POSTFIX = -proposed

请注意,您必须将 YOUR-USERNAME 更改为系统上的适当值。

升级现已顺利进行!

答案2

问题是因为 openssl 正在寻找 的证书/usr/local/ssl/cert.pem,但该证书无效。我跟进此人的解决方案使用sudo ln -s /etc/ssl/certs/ca-certificates.crt /usr/local/ssl/cert.pem

此问题会影响 wget 等其他应用程序。

答案3

更新(2023-03-22): 我发现了一个更简单的方法——只需删除所有证书,然后让 Ubuntu 重新下载它们:

# Make a backup first
mkdir ~/old-certs/
sudo mv /etc/ssl/certs/* ~/old-certs/

# Create a directory for Java certificates, as the below command needs it
sudo mkdir /etc/ssl/certs/java

# update /etc/ssl/certs (remove symlinks) and ca-certificates.crt
sudo update-ca-certificates --fresh 

我遇到了完全相同的问题。我按照建议经过@白骑士,但结果不同。使用以下命令strace查看为什么wget不起作用:

strace -e trace=open,openat wget https://changelogs.ubuntu.com/meta-release

在日志的某个地方,我看到以下文件被打开了:

/usr/lib/ssl/certs/8d33f237.0

使用 OpenSSL 检查上述文件时,我注意到这是 的过期证书Let's Encrypt。因此,我将文件移至/tmp,然后再次尝试该wget命令。这一次,它非常有效!

答案4

我的机器配置为使用 apt-cache,我通过在 /etc/apt-cacher-ng/acng.conf 中添加 PassThroughPattern 来修复这个问题

PassThroughPattern: ^changelogs\.ubuntu\.com:443$

如果您已经有了 PassThroughPattern,则需要对其进行编辑,例如如果您当前有:

PassThroughPattern: soandso.com:443

将其更改为

PassThroughPattern: ^(soandso\.com|changelogs\.ubuntu\.com):443$

如果这没有帮助,您可能需要尝试以下操作:

$ ( sed -ne 's/^ *\(from\|import.*\)/\1/p' \
    /usr/bin/do-release-upgrade \
    echo "init_proxy()" \
    echo "MetaReleaseCore.DEBUG = True" \
    echo "MetaReleaseCore(useProposed=True)"\
  ) | python3

这应该会为您提供有关导致其失败的更多信息。

相关内容