通过 HTTPS 进行 curl

通过 HTTPS 进行 curl

我刚刚设置了一个网站/网络服务器,并刚刚通过 ZeroSSL 对其进行了验证,但当我尝试在其上运行 curl 或 wget 时,它出错了。我可以通过运行wget --no-check-certificate或来绕过这个curl -k问题,但考虑到网站的很大一部分是围绕安装文件构建的,我宁愿让它开箱即用。有没有办法解决这个问题,而无需下载证书或不检查它们?

Curl 错误
curl https://gitnet.me
curl: (60) ssl certificate problem: unable to get local issuer certificate
Wget 错误
wget https://gitnet.me

Resolving gitnet.me... 104.207.144.166
Connecting to gitnet.me|104.207.144.166|:443... connected.
ERROR: cannot verify gitnet.me's certificate, issued by 'CN=ZeroSSL RSA Domain Secure Site CA,O=ZeroSSL,C=AT':
  Unable to locally verify the issuer's authority

答案1

您的网络服务器配置不正确提供 ZeroSSL 中间证书,因此客户端无法看到您的服务器证书是否真正指向已知的根 CA - 两者之间存在差距。

(“ZeroSSL 安全站点 CA”本身不是根 CA——商业根 CA 不直接颁发 HTTPS 证书,它们总是在中间放置一个中间 CA。)

您的网站之所以能与网络浏览器兼容,是因为它们会缓存以前见过的中间件,正是为了处理像您这样的配置错误的网站,但其他 HTTPS 客户端通常不会这样做,因此服务器无论如何都必须提供所有中间证书。

如果您将 ACME 与 Certbot 结合使用,请将您的 Web 服务器配置为使用fullchain.pem不是cert.pem,作为 SSL 证书。其他 ACME 客户端也有类似的文件。

如果你仍在手动下载证书,根据 ZeroSSL 的文档您应该已经收到一个ca_bundle.crt包含证书的文件。您应该合并这两个文件(它们只是文本文件 – 将 ca_bundle 附加到颁发的证书下方),然后配置您的 Web 服务器以使用合并的文件。

  1. cat certificate.crt ca_bundle.crt > cert_with_chain.crt
  2. SSLCertificateFile /etc/.../cert_with_chain.crt
  3. 你确实应该使用 ACME

相关内容