关于 TLSV1.3 端点上的 curl 命令的小问题,以及错误“OpenSSL 是在没有 TLS 1.3 支持的情况下构建的”。
该端点是我无法控制的第三方端点,但从规范来看,启用了 TLSv1.3。
因此,如果我像这样卷曲:它将产生错误,这在某种程度上是预料之中的。
./curl -vik https://third-party.com:18090/health
* Trying x:18090...
* Connected to third-party.com (x) port 18090 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
* CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS header, Unknown (21):
* TLSv1.2 (IN), TLS alert, protocol version (582):
* error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
* Closing connection 0
curl: (35) error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
Run Code Online (Sandbox Code Playgroud)
但我也尝试过这个:(注意 --tlsv1.3,它返回此错误。
curl --tlsv1.3 -vik https://third-party.com:18090/health
* Trying x:18090...
* Connected to third-party.com (x) port 18090 (#0)
* OpenSSL was built without TLS 1.3 support
* Closing connection 0
curl: (4) OpenSSL was built without TLS 1.3 support
Run Code Online (Sandbox Code Playgroud)
OpenSSL 是在没有 TLS 1.3 支持的情况下构建的
问题是,我还没有构建 openssl,我只是做了yum -y install -y openssl openssl-devel
请问如何让我的curl 与tlsv1.3 一起工作,或者如何解决这个问题?
谢谢
“OpenSSL 是在没有 TLS 1.3 支持的情况下构建的”这一措辞可能会产生误导。它实际上意味着这个特定的curl可执行文件是为了使用OpenSSL作为SSL/TLS协议而构建的(不是其他几个选项之一),并且正在使用的OpenSSL的版本/构建不支持TLS1.3;请参阅https://github.com/curl/curl/blob/master/lib/vtls/openssl.cset_ssl_version_min_max_legacy中的函数。查看您的错误消息,很明显来自 1.1.0 以下的 OpenSSL 版本(2016 年发布),并且此类版本确实不支持 TLS1.3。现在只有 OpenSSL 1.1.1 (2018) 支持 TLS1.3(3.0.0,目前处于 alpha 版本,也将支持)(2023 年更新:支持)。
你不能让那个curl 执行TLS1.3。由于您显然正在使用某种 RedHat 系列系统,因此根据系统的不同,标准存储库或可选存储库中可能还有其他可用的 curl 构建。如果没有,您需要获取 OpenSSL 1.1.1(或更高版本),该版本可能在存储库中再次可用,否则您必须从源代码构建,然后从源代码构建(足够新的)curl 才能使用该 OpenSSL 。
另一种方法不是让它直接在您的系统上工作,而是使用另一个系统:要么是真实的系统,可能在云中;要么是真实的系统,可能在云中;或您系统上的虚拟机;或者一个 docker 或类似的容器,它基本上只虚拟化操作系统,而不虚拟化底层硬件。
在 macOS 上,我通过安装新的 curl 版本取得了成功brew install curl。
然后你可以运行一些东西,例如
/usr/local/opt/curl/bin/curl --version
Run Code Online (Sandbox Code Playgroud)
或者
/usr/local/opt/curl/bin/curl --tlsv1.3 --request GET \
--url https://localhost:9200 \
--cacert ca.crt \
--key tls.key \
--cert tls.crt \
--header 'Content-Type: application/json' \
--verbose
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31195 次 |
| 最近记录: |