Compare commits
5 changed files with 42 additions and 45 deletions
|
|
@ -53,10 +53,11 @@ 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: TLSConfig::FILE {
|
tls_config:
|
||||||
certificate_path: "/dev/shm/exp/certs/prime256v1/apple.com.crt".to_string(),
|
TLSConfig::FILE {
|
||||||
private_key_path: "/dev/shm/exp/certs/prime256v1/apple.com.key".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(),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,7 @@ impl DownStreamInner {
|
||||||
} else if byte_count == -1 {
|
} else if byte_count == -1 {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -137,6 +138,7 @@ impl DownStreamInner {
|
||||||
} else if byte_count == -1 {
|
} else if byte_count == -1 {
|
||||||
continue;
|
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 {
|
} else if byte_count == -1 {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -314,6 +317,7 @@ impl UpStreamInner {
|
||||||
} else if byte_count == -1 {
|
} else if byte_count == -1 {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -361,6 +365,6 @@ impl UpStreamInner {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(data_length)
|
return Some(data_length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
42
src/lib.rs
42
src/lib.rs
|
|
@ -61,25 +61,27 @@
|
||||||
//! }
|
//! }
|
||||||
//! }
|
//! }
|
||||||
//!
|
//!
|
||||||
//! // Create new SSLRelay object
|
//! fn main() {
|
||||||
//! let mut relay = sslrelay::SSLRelay::new(
|
//! // Create new SSLRelay object
|
||||||
//! Handler,
|
//! let mut relay = sslrelay::SSLRelay::new(
|
||||||
//! RelayConfig {
|
//! Handler,
|
||||||
//! downstream_data_type: TCPDataType::TLS,
|
//! RelayConfig {
|
||||||
//! upstream_data_type: TCPDataType::TLS,
|
//! downstream_data_type: TCPDataType::TLS,
|
||||||
//! bind_host: "0.0.0.0".to_string(),
|
//! upstream_data_type: TCPDataType::TLS,
|
||||||
//! bind_port: "443".to_string(),
|
//! bind_host: "0.0.0.0".to_string(),
|
||||||
//! remote_host: |_| "remote.com",
|
//! bind_port: "443".to_string(),
|
||||||
//! remote_port: "443".to_string(),
|
//! remote_host: |_| "remote.com",
|
||||||
//! tls_config: TLSConfig::FILE {
|
//! remote_port: "443".to_string(),
|
||||||
//! certificate_path: "./tls.crt".to_string(),
|
//! tls_config: TLSConfig::FILE {
|
||||||
//! private_key_path: "./tls.key".to_string(),
|
//! certificate_path: "./tls.crt".to_string(),
|
||||||
|
//! private_key_path: "./tls.key".to_string(),
|
||||||
|
//! },
|
||||||
//! },
|
//! },
|
||||||
//! },
|
//! );
|
||||||
//! );
|
|
||||||
//!
|
//!
|
||||||
//! // Start listening
|
//! // Start listening
|
||||||
//! relay.start();
|
//! relay.start();
|
||||||
|
//! }
|
||||||
//! ```
|
//! ```
|
||||||
|
|
||||||
use openssl::{
|
use openssl::{
|
||||||
|
|
@ -144,12 +146,6 @@ 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,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
14
src/relay.rs
14
src/relay.rs
|
|
@ -16,7 +16,7 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
|
||||||
}
|
}
|
||||||
/// Starts the SSLRelay connection handling.
|
/// Starts the SSLRelay connection handling.
|
||||||
pub fn start(&mut self) {
|
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 rport = self.config.remote_port.clone();
|
||||||
let upstream_data_stream_type = self.config.upstream_data_type;
|
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 acceptor = acceptor.clone();
|
||||||
let mut handler_clone = self.handlers.as_ref().unwrap().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 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) => {
|
||||||
|
|
@ -51,7 +50,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),
|
||||||
|
|
@ -91,7 +90,7 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
|
||||||
Ok(stream) => {
|
Ok(stream) => {
|
||||||
let handler_clone = self.handlers.as_ref().unwrap().clone();
|
let handler_clone = self.handlers.as_ref().unwrap().clone();
|
||||||
|
|
||||||
let r_host = rhost;
|
let r_host = rhost.clone();
|
||||||
let r_port = rport.clone();
|
let r_port = rport.clone();
|
||||||
|
|
||||||
let this_conn_id = conn_id;
|
let this_conn_id = conn_id;
|
||||||
|
|
@ -155,11 +154,6 @@ 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 \
|
||||||
|
|
|
||||||
14
src/tcp.rs
14
src/tcp.rs
|
|
@ -311,8 +311,9 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
Self::handle_error(
|
Self::handle_error(
|
||||||
format!(
|
format!(
|
||||||
"Can't connect to remote host: {}:{}\nErr: {}",
|
"Can't connect to remote host: {}\nErr: {}",
|
||||||
remote_host, remote_port, e
|
format!("{}:{}", remote_host, remote_port),
|
||||||
|
e
|
||||||
)
|
)
|
||||||
.as_str(),
|
.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)));
|
let _ = s.set_read_timeout(Some(Duration::from_millis(50)));
|
||||||
Ok(DataStreamType::RAW(s))
|
return Ok(DataStreamType::RAW(s));
|
||||||
}
|
}
|
||||||
TCPDataType::TLS => {
|
TCPDataType::TLS => {
|
||||||
let mut sslbuilder = SslConnector::builder(SslMethod::tls()).unwrap();
|
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) => {
|
Err(e) => {
|
||||||
Self::handle_error(
|
Self::handle_error(
|
||||||
format!(
|
format!(
|
||||||
"Can't connect to remote host: {}:{}\nErr: {}",
|
"Can't connect to remote host: {}\nErr: {}",
|
||||||
remote_host, remote_port, e
|
format!("{}:{}", remote_host, remote_port),
|
||||||
|
e
|
||||||
)
|
)
|
||||||
.as_str(),
|
.as_str(),
|
||||||
);
|
);
|
||||||
|
|
@ -355,7 +357,7 @@ impl<H: HandlerCallbacks + std::marker::Sync + std::marker::Send + Clone + 'stat
|
||||||
let _ = s
|
let _ = s
|
||||||
.get_ref()
|
.get_ref()
|
||||||
.set_read_timeout(Some(Duration::from_millis(50)));
|
.set_read_timeout(Some(Duration::from_millis(50)));
|
||||||
Ok(DataStreamType::TLS(s))
|
return Ok(DataStreamType::TLS(s));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue