Compare commits

..
5 changed files with 42 additions and 45 deletions

View file

@ -53,10 +53,11 @@ fn main() {
server_name.map_or_else(|| panic!("NO HOST"), str::to_string)
},
remote_port: "443".to_string(),
tls_config: TLSConfig::FILE {
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(),
},
tls_config:
TLSConfig::FILE {
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(),
},
},
);

View file

@ -74,6 +74,7 @@ impl DownStreamInner {
} else if byte_count == -1 {
continue;
}
} else {
}
}
}
@ -137,6 +138,7 @@ impl DownStreamInner {
} else if byte_count == -1 {
continue;
}
} else {
}
}
}
@ -184,7 +186,7 @@ impl DownStreamInner {
},
}
}
Some(data_length)
return Some(data_length);
}
}
@ -255,6 +257,7 @@ impl UpStreamInner {
} else if byte_count == -1 {
continue;
}
} else {
}
}
}
@ -314,6 +317,7 @@ impl UpStreamInner {
} else if byte_count == -1 {
continue;
}
} else {
}
}
}
@ -361,6 +365,6 @@ impl UpStreamInner {
},
}
}
Some(data_length)
return Some(data_length);
}
}

View file

@ -61,25 +61,27 @@
//! }
//! }
//!
//! // Create new SSLRelay object
//! let mut relay = sslrelay::SSLRelay::new(
//! Handler,
//! RelayConfig {
//! downstream_data_type: TCPDataType::TLS,
//! upstream_data_type: TCPDataType::TLS,
//! bind_host: "0.0.0.0".to_string(),
//! bind_port: "443".to_string(),
//! remote_host: |_| "remote.com",
//! remote_port: "443".to_string(),
//! tls_config: TLSConfig::FILE {
//! certificate_path: "./tls.crt".to_string(),
//! private_key_path: "./tls.key".to_string(),
//! fn main() {
//! // Create new SSLRelay object
//! let mut relay = sslrelay::SSLRelay::new(
//! Handler,
//! RelayConfig {
//! downstream_data_type: TCPDataType::TLS,
//! upstream_data_type: TCPDataType::TLS,
//! bind_host: "0.0.0.0".to_string(),
//! bind_port: "443".to_string(),
//! remote_host: |_| "remote.com",
//! remote_port: "443".to_string(),
//! tls_config: TLSConfig::FILE {
//! certificate_path: "./tls.crt".to_string(),
//! private_key_path: "./tls.key".to_string(),
//! },
//! },
//! },
//! );
//! );
//!
//! // Start listening
//! relay.start();
//! // Start listening
//! relay.start();
//! }
//! ```
use openssl::{
@ -144,12 +146,6 @@ pub enum TLSConfig {
certificate: Vec<u8>,
private_key: Vec<u8>,
},
CALLBACK {
servername_callback: fn(
&mut openssl::ssl::SslRef,
&mut openssl::ssl::SslAlert,
) -> Result<(), openssl::ssl::SniError>,
},
NONE,
}

View file

@ -16,7 +16,7 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
}
/// Starts the SSLRelay connection handling.
pub fn start(&mut self) {
let rhost = self.config.remote_host;
let rhost = self.config.remote_host.clone();
let rport = self.config.remote_port.clone();
let upstream_data_stream_type = self.config.upstream_data_type;
@ -38,11 +38,10 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
let acceptor = acceptor.clone();
let mut handler_clone = self.handlers.as_ref().unwrap().clone();
let r_host = rhost;
let r_host = rhost.clone();
let r_port = rport.clone();
let this_conn_id = conn_id;
thread::spawn(move || {
match acceptor.accept(stream) {
Ok(stream) => {
@ -51,7 +50,7 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
.servername(openssl::ssl::NameType::HOST_NAME);
handler_clone.cb.set_server_name(server_name);
let remote_host = (r_host)(server_name);
// FULL DUPLEX OBJECT CREATION HERE
match FullDuplexTcp::new(
DataStreamType::TLS(stream),
@ -91,7 +90,7 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
Ok(stream) => {
let handler_clone = self.handlers.as_ref().unwrap().clone();
let r_host = rhost;
let r_host = rhost.clone();
let r_port = rport.clone();
let this_conn_id = conn_id;
@ -155,11 +154,6 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
.unwrap();
acceptor.set_private_key(private_key.as_ref()).unwrap();
}
TLSConfig::CALLBACK {
servername_callback,
} => {
acceptor.set_servername_callback(*servername_callback);
}
TLSConfig::NONE => {
panic!(
"[SSLRelay Error] Specified NONE for TLSConfig and downstream_data_type as \

View file

@ -311,8 +311,9 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
Err(e) => {
Self::handle_error(
format!(
"Can't connect to remote host: {}:{}\nErr: {}",
remote_host, remote_port, e
"Can't connect to remote host: {}\nErr: {}",
format!("{}:{}", remote_host, remote_port),
e
)
.as_str(),
);
@ -320,7 +321,7 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
}
};
let _ = s.set_read_timeout(Some(Duration::from_millis(50)));
Ok(DataStreamType::RAW(s))
return Ok(DataStreamType::RAW(s));
}
TCPDataType::TLS => {
let mut sslbuilder = SslConnector::builder(SslMethod::tls()).unwrap();
@ -333,8 +334,9 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
Err(e) => {
Self::handle_error(
format!(
"Can't connect to remote host: {}:{}\nErr: {}",
remote_host, remote_port, e
"Can't connect to remote host: {}\nErr: {}",
format!("{}:{}", remote_host, remote_port),
e
)
.as_str(),
);
@ -355,7 +357,7 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
let _ = s
.get_ref()
.set_read_timeout(Some(Duration::from_millis(50)));
Ok(DataStreamType::TLS(s))
return Ok(DataStreamType::TLS(s));
}
}
}