Rust Openssl如何在tls握手之前设置alpn h2和http/1. 1

wz8daaqr  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(125)

我想在tls握手之前设置alpn。
ALPN是H2和HTTP/1.1
在python中,我可以这样设置:

ssl.set_alpn_protos([b'h2', b'http/1.1'])

但是当我在Rust中设置这个时,我得到了一个错误

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

错误信息被

thread 'main' panicked at 'set ALPN error: ErrorStack([])', src/checker/tls/get_tls_info.rs:58:56

RustOpenSSL设置ALPN文档被对接
我现在该怎么办
你有没有主意
谢谢你的帮助:)

lymnna71

lymnna711#

从您链接的文档中(强调我的文档):
它由一系列受支持的协议名组成,这些协议名的前缀为字节长度
\x06替换为\x02,因为b"h2"2字节,而不是6

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

您也可以使用类似于以下的方法,从类似于pythons的列表中计算导线格式:

let protos: &[&[u8]] = &[b"h21", b"http/1.1"];
let wire = protos.into_iter().flat_map(|proto| {
    let mut proto = proto.to_vec();
    let len: u8 = proto.len().try_into().expect("proto is too long");
    proto.insert(0, len);
    proto
}).collect::<Vec<_>>();

相关问题