对于初学者,我正在尝试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
尝试:: 1 ...
TCP_NODELAY设置
连接到localhost(:: 1)端口13443(#0)
ALPN,提供h2
ALPN,提供http / 1.1
密码选择:ALL:!导出:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
成功设置证书验证位置:
CAfile:cfm.wdf.sap.corp.pem
CApath:无
TLSv1.0(OUT),TLS握手,客户问候(1):
TLSv1.0(IN),TLS握手,服务器问候(2):
TLSv1.0(IN),TLS握手,证书(11):
TLSv1.0(IN),TLS握手,服务器密钥交换(12):
TLSv1.0(IN),TLS握手,请求CERT(13):
TLSv1.0(IN),TLS握手,服务器完成(14):
TLSv1.0(OUT),TLS握手,证书(11):
TLSv1.0(OUT),TLS握手,客户端密钥交换(16):
TLSv1.0(OUT),TLS更改密码,客户端问候(1):
TLSv1.0(OUT),TLS握手,已完成(20):
TLSv1.0(IN),TLS警报,服务器问候(2):
错误:14094410:SSL例程:SSL3_READ_BYTES:sslv3警报握手失败
停止了暂停流!
关闭连接0
curl:(35)错误:14094410:SSL例程:SSL3_READ_BYTES:sslv3警报握手失败
答案 0 :(得分:0)
--cacert
的命令行指定用于验证服务器证书的信任库。您还有一个--key
的命令行参数。这用于指定客户端证书的密钥,并应与--cert
一起使用以指定客户端证书。但是,您没有--cert
选项,因此--key
没有意义。
TLSv1.0(IN),TLS握手,请求CERT(13):
这意味着服务器从客户端请求证书,即"客户端证书"。要指定一个,您需要使用命令行选项--cert
(您不使用)和--key
(您拥有)。如果缺少--cert
选项,则不知道客户端证书卷曲,因此不会向服务器发送任何证书。这可能是服务器在握手结束时通过错误警报关闭连接的原因:
TLSv1.0(IN),TLS警报,服务器问候(2): 错误:14094410:SSL例程:SSL3_READ_BYTES:sslv3警报握手失败
要解决此问题,请使用--cert
和--key
参数提供预期的客户端证书和密钥。