Servername callback

This commit is contained in:
Pascal Engélibert 2026-08-24 09:12:13 +02:00
commit b475ad2c85
3 changed files with 17 additions and 6 deletions

View file

@ -53,11 +53,10 @@ fn main() {
server_name.map_or_else(|| panic!("NO HOST"), str::to_string) server_name.map_or_else(|| panic!("NO HOST"), str::to_string)
}, },
remote_port: "443".to_string(), remote_port: "443".to_string(),
tls_config: tls_config: TLSConfig::FILE {
TLSConfig::FILE { certificate_path: "/dev/shm/exp/certs/prime256v1/apple.com.crt".to_string(),
certificate_path: "/dev/shm/exp/certs/prime256v1/apple.com.crt".to_string(), private_key_path: "/dev/shm/exp/certs/prime256v1/apple.com.key".to_string(),
private_key_path: "/dev/shm/exp/certs/prime256v1/apple.com.key".to_string(), },
},
}, },
); );

View file

@ -146,6 +146,12 @@ pub enum TLSConfig {
certificate: Vec<u8>, certificate: Vec<u8>,
private_key: Vec<u8>, private_key: Vec<u8>,
}, },
CALLBACK {
servername_callback: fn(
&mut openssl::ssl::SslRef,
&mut openssl::ssl::SslAlert,
) -> Result<(), openssl::ssl::SniError>,
},
NONE, NONE,
} }

View file

@ -42,6 +42,7 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
let r_port = rport.clone(); let r_port = rport.clone();
let this_conn_id = conn_id; let this_conn_id = conn_id;
thread::spawn(move || { thread::spawn(move || {
match acceptor.accept(stream) { match acceptor.accept(stream) {
Ok(stream) => { Ok(stream) => {
@ -154,6 +155,11 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
.unwrap(); .unwrap();
acceptor.set_private_key(private_key.as_ref()).unwrap(); acceptor.set_private_key(private_key.as_ref()).unwrap();
} }
TLSConfig::CALLBACK {
servername_callback,
} => {
acceptor.set_servername_callback(*servername_callback);
}
TLSConfig::NONE => { TLSConfig::NONE => {
panic!( panic!(
"[SSLRelay Error] Specified NONE for TLSConfig and downstream_data_type as \ "[SSLRelay Error] Specified NONE for TLSConfig and downstream_data_type as \