证书适用于 Chrome + Firefox,但不适用于 curl(“无法获取本地颁发者证书”)与最近的 cacert.pem

信息安全 php 铬合金 卷曲
2021-08-15 15:04:43

我正在尝试连接到防火墙后面的站点,这就是为什么我无法共享 URL 以进行验证。

$ curl -vvvv https://example.com:8080/foo/ba/?wsdl --cacert /tmp/cacert-2018-12-05.pem 
*   Trying a.b.c.d...
* TCP_NODELAY set
* Connected to example.com (a.b.c.d) port 8080 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /tmp/cacert-2018-12-05.pem
  CApath: /etc/ssl/certs
* (304) (OUT), TLS handshake, Client hello (1):
* (304) (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
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

怎么可能?

这是否意味着中间不能正确拉动?但为什么它可以与浏览器一起使用?

链条看起来像这样:在此处输入图像描述

“DigiCert Global Root G2”在我正在使用的 cacert.pem 中。

但不是 Thawte TLS RSA CA G1。

2个回答

这是否意味着中间不能正确拉动?

虽然从少数信息中不能肯定地说这是一个典型的错误配置,导致您看到的结果。

但为什么它可以与浏览器一起使用?

浏览器尝试通过使用来自先前连接的缓存中间证书 (Firefox) 甚至尝试根据颁发者信息 (Chrome) 检索丢失的证书来解决此类错误配置。其他工具通常无法解决此类错误配置。

这是因为 Chrome 和 FF 支持 AIA(授权信息访问)而 curl 不支持。AIA 是一个 SSL 扩展,提供有关颁发者的信息,并且可以“即时”下载中间证书。