You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rust中使用OpenSSL如何在TLS握手前设置ALPN协议?

问题解决:Rust OpenSSL设置ALPN协议错误

你的问题出在ALPN协议列表的编码格式上。Rust中set_alpn_protos要求的是TLV(长度-值)格式的字节序列,每个协议名称前必须用一个字节表示其长度:

  • 对于h2,长度是2(不是你写的6),所以前缀应该是\x02
  • 对于http/1.1,长度是8,前缀\x08是正确的

修正后的代码:

context.set_alpn_protos(b"\x02h2\x08http/1.1").expect("set ALPN error");

为什么Python写法不同?

Python的ssl.set_alpn_protos已经封装了编码细节,只需传入协议名称的字节数组列表,底层会自动转换成符合要求的TLV格式。而Rust的OpenSSL绑定更贴近原生库,需要手动构造正确的字节序列。

内容的提问来源于stack exchange,提问作者Yin Lei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:05:22