Ubuntu 16.04 上的根证书问题

Ubuntu 16.04 上的根证书问题

我正在配置一个运行 Ubuntu 16.04 的新 Web 应用程序服务器。我唯一“不寻常”的事情是安装 php 5.6 而不是 php7。然而,Php5.6 确实需要有效的根证书,而我在各种关心此问题的应用程序中都遇到了错误。Curl、cron 等。

我尝试了各种修复方法来解决此问题,但没有任何改善。例如:

https://github.com/composer/composer/issues/3346#issuecomment-76593763

https://stackoverflow.com/questions/35821245/github-server-certificate-verification-failed/35824116#35824116

如何安装根证书?

还是没运气。我运行的 cron 作业仍然生成:

curl: (60) server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

更多详情请点击这里:http://curl.haxx.se/docs/sslcerts.html

curl 默认使用证书颁发机构 (CA) 公钥 (CA 证书)“捆绑包”执行 SSL 证书验证。如果默认捆绑包文件不够用,您可以使用 --cacert 选项指定备用文件。

如果此 HTTPS 服务器使用捆绑包中所表示的 CA 签名的证书,则证书验证可能由于证书问题而失败(证书可能已过期,或者名称可能与 URL 中的域名不匹配)。

如果您想关闭 curl 对证书的验证,请使用 -k(或 --insecure)选项。

答案1

我建议检查 Web 服务器证书的有效性。您描述的步骤是正确的,但让我们了解有关证书的事实。

我使用以下步骤来排除 Web 服务器证书故障。

  • 检查主题中的 /CN 选项中是否包含您期望的服务器名称:

(SERVER_COMMON_NAME 是您想要联系的网络服务器)

 echo | openssl s_client -servername ${SERVER_COMMON_NAME} \
    -connect ${SERVER_COMMON_NAME}:443 2>/dev/null | \
    openssl x509 -noout -subject

检查该 CA 是否是您期望的 CA(证书的供应商):

echo | openssl s_client -servername ${SERVER_COMMON_NAME} \
            -connect ${SERVER_COMMON_NAME}:443 2>/dev/null | \
        openssl x509 -noout -issuer

检查发行人行中的 /CN 字段。

  • 检查证书日期
echo | openssl s_client -服务器名称 ${SERVER_COMMON_NAME} \
        -连接 ${SERVER_COMMON_NAME}:443 2> /dev/null | \
        openssl x509 -noout -日期

检查“notBefore”和“notAfter”结果。

  • 如果以上看起来不错,则使用 curl 进行测试并指定 CA 根证书文件:

    curl --cacert certs/the_ca.cert.pem -I https://${SERVER_COMMON_NAME}:443

如果 --cacert 选项有效,则检查 CA-root 文件是否为系统所知。

省略 --cacert。如果 curl 给出错误,则 ca-root-file 未安装在系统 ca-certificates 目录中。

相关内容