在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
相关产品推荐
相关产品推荐

