如何卷曲不安全的 HTTPS

How to CURL unsecured HTTPS

首先,我正在尝试 CURL API 托管在 docker 图像上。这是 CURL 输出,对我来说没有意义。

curl -ik -v --tlsv1.0 --cacert cfmpem.pem --key key.pem https://localhost:13443/boot/api/cfm-menu-context/?page=2

Trying ::1...
TCP_NODELAY set
Connected to localhost (::1) port 13443 (#0)
ALPN, offering h2
ALPN, offering http/1.1
Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH

successfully set certificate verify locations:
CAfile: cfm.wdf.sap.corp.pem
CApath: none

TLSv1.0 (OUT), TLS handshake, Client hello (1):
TLSv1.0 (IN), TLS handshake, Server hello (2):
TLSv1.0 (IN), TLS handshake, Certificate (11):
TLSv1.0 (IN), TLS handshake, Server key exchange (12):
TLSv1.0 (IN), TLS handshake, Request CERT (13):
TLSv1.0 (IN), TLS handshake, Server finished (14):
TLSv1.0 (OUT), TLS handshake, Certificate (11):
TLSv1.0 (OUT), TLS handshake, Client key exchange (16):
TLSv1.0 (OUT), TLS change cipher, Client hello (1):
TLSv1.0 (OUT), TLS handshake, Finished (20):
TLSv1.0 (IN), TLS alert, Server hello (2):
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
stopped the pause stream!
Closing connection 0 curl: (35) error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

您的 --cacert 命令行指定了信任库来验证服务器证书。您还有一个命令行参数 --key。这用于指定客户端证书的密钥,应该与 --cert 结合使用以指定客户端证书。但是,您没有 --cert 选项,因此 --key 没有意义。

TLSv1.0 (IN), TLS handshake, Request CERT (13):

这意味着服务器向客户端请求证书,即"client certificate"。要指定一个,您需要使用命令行选项 --cert(您不使用)和 --key(您使用)。鉴于缺少 --cert 选项,没有已知的客户端证书可以卷曲,因此不会发送到服务器。这可能是服务器在握手结束时关闭连接并发出错误警报的原因:

TLSv1.0 (IN), TLS alert, Server hello (2): error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

要解决此问题,请使用 --cert--key 参数提供预期的客户端证书和密钥。