首先,我正在尝试 CURL
托管在 docker 镜像上的 API
。这是 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
的命令行参数。这用于指定客户端证书的 key ,应与 --cert
结合使用以指定客户端证书。但是,您没有 --cert
选项,因此 --key
没有意义。
TLSv1.0 (IN), TLS handshake, Request CERT (13):
这意味着服务器向客户端请求证书,即“客户端证书”。要指定一个,您需要使用命令行选项 --cert
(您不使用)和 --key
(您有)。鉴于缺少 --cert
选项,没有已知的客户端证书可以 curl ,因此不会发送到服务器。这可能是服务器在握手结束时关闭连接并发出错误警报的原因:
TLSv1.0 (IN), TLS alert, Server hello (2): error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
要解决此问题,请使用 --cert
和 --key
参数提供预期的客户端证书和 key 。
关于ssl - 如何 curl 不安全的 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48507737/