我正在编写一个依赖于我无法控制的远程 API 端点的脚本。
今天,我的脚本停止工作了,因为终端的 SSL 证书今天已过期,但他们还没有修复它。运行后curl -v
,我得到了以下输出:
wug@server:~$ curl -v -G -m5 [redacted]
* Connecting to hostname: 10.12.112.1
* Trying 10.12.112.1:19999...
* TCP_NODELAY set
* Connected to 10.12.112.1 (10.12.112.1) port 19999 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /[redact]/ca.rsa.4096.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (OUT), TLS alert, certificate expired (557):
* SSL certificate problem: certificate has expired
* Closing connection 0
curl: (60) SSL certificate problem: certificate has expired
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.
我对此很恼火,但这超出了我的控制范围。这里需要考虑安全性,所以我不想禁用所有 TLS 验证curl -k
。理想情况下,我会传递一个参数,指示 curl 有选择地忽略有关过期证书的错误(似乎是 TLS 1.3 错误 557)。可以这样做吗?如果不行,可以wget
做到吗?
答案1
我没有找到有选择地忽略有关证书过期的错误的方法。
使用服务器证书的哈希值可能会有所帮助--pinnedpubkey
。缺点是,显然,每当服务器证书更新时,您都必须更改哈希值。
如果哈希值正确,我不太确定会发生什么,但当证书过期时。就我的用例而言,事实证明可以--pinnedpubkey
结合--insecure
没有 --insecure
覆盖--pinnedpubkey
设置,但我不知道这是否是可能随着 curl 版本而改变的保证行为。