ssl - 如何 curl 不安全的 HTTPS

标签 ssl curl handshake

首先,我正在尝试 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/

相关文章:

mysql - PDO异常 : Cannot find driver but driver installed

java - HAProxy SSL终止+客户端证书验证+ curl/Java客户端

rest - "no data provided"json PUT 请求中出现错误

java - 在 Java 中为 TCP 实现 3 次握手

go - WebSocket - 关闭握手 gorilla

laravel - 通过SSL协议(protocol)发送邮件(非加密)-Laravel

ruby-on-rails - 使用 Apache、Puma、Ubuntu 设置 Rails SSL

javascript - Jsrsasign。如何验证服务器上的签名?

同时 Curl 多个获取 URL

java - WebSocket握手时出错: Unexpected response code: 400 with CoinIMP keys