如何解决服务器CA证书过期的问题

一、问题的提出

最近在学习VPS,在Linux系统里给服务器安装某项服务时,在服务的log里看到下面的错误信息:

failed to verify certificate: x509: certificate has expired or is not yet valid: current time 2023-12-25T04:42:38-05:00 is after 2021-09-30T14:01:15Z, result: , status code: 0

经过分析,发现上面的错误是由于系统证书的时间比服务器当前的时间要早,也就是过期了,所以才报错。

在安装acme时,同时遇到了下面的报错,进一步确认了CA certs过期的问题。

curl https://get.acme.sh | sh -s [email protected] % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 curl: (60) The certificate issuer's certificate has expired. Check your system date and time. More details here: http://curl.haxx.se/docs/sslcerts.html curl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). If the default bundle file isn't adequate, you can specify an alternate file using the --cacert option. If this HTTPS server uses a certificate signed by a CA represented in the bundle, the certificate verification probably failed due to a problem with the certificate (it might be expired, or the name might not match the domain name in the URL). If you'd like to turn off curl's verification of the certificate, use the -k (or --insecure) option.

二、问题的解决

我在网上群里提问,有大佬提出是系统证书较老,建议更新新系统,我的系统是CentOS,安装时的确不是最新版。如果重新安装系统,那么我之前安装的程序就白费了,那么就只能更新证书来解决了。

于时,我把上面第二个错误信息交给ChatGPT,并明确这是服务器里面的报错信息。ChatGPT很快给出了解答:

错误提示表明 curl 在执行时遇到了 SSL 证书验证问题,具体原因是证书颁发机构(CA)的证书已经过期。这可能是因为你的系统时间不准确,也可能是因为使用的 curl 版本不包含最新的 CA 证书捆绑文件。 以下是解决问题的一些建议: 检查系统时间: 确保你的服务器上的系统时间是准确的。

你可以使用以下命令来同步系统时间:

sudo ntpdate -u time.nist.gov 如果你使用的是 systemd,

也可以使用以下命令: sudo timedatectl set-ntp true 更新 CA 证书捆绑文件:

在某些情况下,curl 使用的 CA 证书捆绑文件可能已过期。你可以手动更新 CA 证书。在很多系统中,CA 证书捆绑文件通常位于 /etc/ssl/certs/ca-certificates.crt。你可以使用系统包管理器安装最新的 CA 证书。

例如,在 Debian 或 Ubuntu 系统上,可以使用以下命令: sudo apt-get update sudo apt-get install --reinstall ca-certificates

在 CentOS 或 RHEL 系统上,可以使用以下命令: sudo yum update ca-certificates 使用 -k 或 --insecure 选项: 如果你确定连接目标不涉及安全风险,你可以使用 -k 或 --insecure 选项来忽略证书验证。

请注意,这会使通信不再安全,只有在你能够确认连接安全的情况下使用。 curl -k https://get.acme.sh | sh -s [email protected] 请根据你的具体情况选择其中一种或多种方法来解决问题。确保在修改系统设置之前,了解可能的安全风险。

根据上面的回答,最终确认是:证书颁发机构(CA)的证书已经过期。

由于我的是CentOS系统,在检查完服务器时间没有问题的情况下,我采用下面的命令:

sudo yum update ca-certificates

最后,终于一键解决了系统证书超期的问题。

三、学后反思

  1. 上面的问题困扰了我两天时间,主要原因是自己对CA证书的理解还不够深入,ChatGPT用的比较少,对于问题的解决只是通过搜索引擎和网上交流平台,对于信息的筛选存在不足。

  2. 以后学习VPS技术,必须要综合搜索引擎、CSDN、ChatGPT等渠道,以便更快地查明问题的所在,并进行快速地分析、判断和处理。

  3. 至于如何发现问题,可以通过log的记录,一项一项地查明,可以复制到搜索引擎搜索,也可以喂给ChatGPT分析,但是要明确一下分析的语境,以免让ChatGPT产生误会。由于Linux是开源的系统,而且网上学习的资源也特别地丰富,所以ChatGPT对于问题的理解、识别、解决都相当地到位,能够快速地给我们一些非常好的思路和建议,因此应该成为技术学习者必备的工具。

你可能感兴趣的:(人工智能,服务器,运维)