我正在配置一个运行 Ubuntu 16.04 的新 Web 应用程序服务器。我唯一“不寻常”的事情是安装 php 5.6 而不是 php7。然而,Php5.6 确实需要有效的根证书,而我在各种关心此问题的应用程序中都遇到了错误。Curl、cron 等。
我尝试了各种修复方法来解决此问题,但没有任何改善。例如:
https://github.com/composer/composer/issues/3346#issuecomment-76593763
还是没运气。我运行的 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 目录中。