Servername callback
This commit is contained in:
parent
11a4777cfe
commit
b475ad2c85
3 changed files with 17 additions and 6 deletions
|
|
@ -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(),
|
},
|
||||||
},
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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) => {
|
||||||
|
|
@ -50,7 +51,7 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
|
||||||
.servername(openssl::ssl::NameType::HOST_NAME);
|
.servername(openssl::ssl::NameType::HOST_NAME);
|
||||||
handler_clone.cb.set_server_name(server_name);
|
handler_clone.cb.set_server_name(server_name);
|
||||||
let remote_host = (r_host)(server_name);
|
let remote_host = (r_host)(server_name);
|
||||||
|
|
||||||
// FULL DUPLEX OBJECT CREATION HERE
|
// FULL DUPLEX OBJECT CREATION HERE
|
||||||
match FullDuplexTcp::new(
|
match FullDuplexTcp::new(
|
||||||
DataStreamType::TLS(stream),
|
DataStreamType::TLS(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 \
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue