curl:(60)SSL 证书:无法获取本地颁发者证书 - ubuntu

curl:(60)SSL 证书:无法获取本地颁发者证书 - ubuntu

我们运行以下软件版本:

  • Ubuntu 18.04.5
  • Apache 2.4.29
  • curl 7.58.0

我们运行一个教育应用程序,其中有许多 API 可以将文件上传到第三方网站https://api.turnitinuk.com来自我们的网络服务器https://nclhe-moodle.ncl-coll.ac.uk

我们于 2020 年 12 月在网络服务器上成功更新了 nclhe-moodle.ncl-coll.ac.uk 的 SSL 证书,并且一切都按照我们预期的方式进行,但突然在 2021 年 2 月,我们开始收到以下错误,并且上传失败。

curl: (60) SSL certificate : unable to get local issuer certificate

(我不明白本地颁发者证书是什么,是客户端(网络服务器)还是服务器)

不知道为什么,它是在 2021 年 2 月才开始的,而证书是在 2020 年 12 月更新的。

如果我绕过代理服务器上的 IPS 证书检查,我们的 API 就可以成功运行。

以下是我迄今为止为解决此问题所尝试的方法:

  • 在网络服务器上运行此命令:

    curl -vs https://api.turnitinuk.com
    

    以下错误:

    * Rebuilt URL to: https://api.turnitinuk.com/
    *   Trying 199.47.86.35...
    * TCP_NODELAY set
    * Connected to api.turnitinuk.com (199.47.86.35) port 443 (#0)
    * ALPN, offering h2
    * ALPN, offering http/1.1
    * successfully set certificate verify locations:
    *   CAfile: /etc/ssl/certs/ca-certificates.crt
      CApath: /etc/ssl/certs
    * TLSv1.3 (OUT), TLS handshake, Client hello (1):
    * TLSv1.3 (IN), TLS handshake, Server hello (2):
    * TLSv1.2 (IN), TLS handshake, Certificate (11):
    * TLSv1.2 (OUT), TLS alert, Server hello (2):
    * SSL certificate problem: unable to get local issuer certificate
    * stopped the pause stream!
    * Closing connection 0
    
  • 运行以下 OpenSSL 命令从我们的 Moodle 实例获取证书链

    openssl s_client -showcerts -servername nclhe-moodle.ncl-coll.ac.uk -connect nclhe-moodle.ncl-coll.ac.uk:443
    
  • 下载了证书链中的所有 3 个证书https://nclhe-moodle.ncl-coll.ac.uk并检查它们是否已在/etc/ssl/certs/ca-certificates.crt文件中。果然,其中一个证书(中间证书)不在 ca-certificates.crt 文件中。

  • 使用以下命令将 1 个 .cer 文件转换为 .crt

    openssl x509 -inform PEM -in QuoVadis_Global_SSL_ICA_G3.cer -out QuoVadis_Global_SSL_ICA_G3.crt
    
  • 将.crt 文件上传到/usr/local/share/ca-certificates目录。

  • 运行命令

    sudo update-ca-certificates
    
  • 查看/etc/ssl/certs/ca-certificates.crt文件,发现文件中缺少证书,并且目录中已创建 2 个符号链接,/etc/ssl/certs如下所示

    • QuoVadis_Global_SSL_ICA_G3.pem->/usr/local/share/ca-certificates/QuoVadis_Global_SSL_ICA_G3.crt

    • 35e514f6.0 -> QuoVadis_Global_SSL_ICA_G3.pem

  • 停止并重新启动 apache

    sudo /etc/init.d/apache2 stop
    sudo /etc/init.d/apache2 start
    
  • 再次重试,但仍然有同样的错误

我还有一个问题:

在我的文件中,除了我刚刚申请的 CA 之外,/etc/ssl/certs所有 CA 都是符号链接的。考虑到证书是文件的一部分,这是否是个问题?/usr/share/ca-certificates/usr/local/share/ca-certificates/etc/ssl/certs/ca-certificates/crt

我有点困惑,不知道还能尝试什么,我已经对此进行了广泛的研究,试图自己修复它,有人能帮忙吗

提前谢谢了,

苹果


最新更新 - 问题尚未解决。文件通过 API 自动上传,因此 turnitin 应用程序位于https://nclhe-moodle.ncl-coll.ac.uk用户登录后,点击几个按钮,应用程序就会通过 API 将文件上传到https://api.turnitinuk.com。唯一变化的是 SSL 证书于 2020 年 12 月成功续订,但这个问题直到 2021 年 2 月才开始出现。

答案1

从阅读您的问题来看,客户端是大学服务器,服务器是 TurnitinUK 服务器。

该消息告诉您大学服务器不信任 TurnitinUK 服务器。

您需要做的就是添加AAA 认证服务到您的ca-certificates.crt文件 - 不再需要。此文件是您的信任锚存储,信任锚是 TurnitinUK 使用的根 CA。它不是添加所有证书-我可以徒劳地找到-希望事情会起作用的存储 :-)

正如您所注意到的,服务器会向您发送其所有证书(包括多余的根证书),因此您不需要在客户端添加它们(您永远不应该这样做)。您需要做的就是告诉客户端您信任链中的最后一个证书(根 CA 证书),PKI 的魔力会解决其余问题。任何由根 CA 签名的证书都是受信任的(一旦将其添加到信任库中),因此当服务器向您呈现您的下属 CA 和最终实体证书时,它们都是受信任的。

尝试清理,/usr/local/share/ca-certificates只留下AAA 认证服务一次并重新运行update-ca-certificates

相关内容