Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5e0007fab6 | |||
| b475ad2c85 |
5 changed files with 45 additions and 42 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(),
|
},
|
||||||
},
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,6 @@ impl DownStreamInner {
|
||||||
} else if byte_count == -1 {
|
} else if byte_count == -1 {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -138,7 +137,6 @@ impl DownStreamInner {
|
||||||
} else if byte_count == -1 {
|
} else if byte_count == -1 {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -186,7 +184,7 @@ impl DownStreamInner {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Some(data_length);
|
Some(data_length)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -257,7 +255,6 @@ impl UpStreamInner {
|
||||||
} else if byte_count == -1 {
|
} else if byte_count == -1 {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -317,7 +314,6 @@ impl UpStreamInner {
|
||||||
} else if byte_count == -1 {
|
} else if byte_count == -1 {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -365,6 +361,6 @@ impl UpStreamInner {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Some(data_length);
|
Some(data_length)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
42
src/lib.rs
42
src/lib.rs
|
|
@ -61,27 +61,25 @@
|
||||||
//! }
|
//! }
|
||||||
//! }
|
//! }
|
||||||
//!
|
//!
|
||||||
//! fn main() {
|
//! // Create new SSLRelay object
|
||||||
//! // Create new SSLRelay object
|
//! let mut relay = sslrelay::SSLRelay::new(
|
||||||
//! let mut relay = sslrelay::SSLRelay::new(
|
//! Handler,
|
||||||
//! Handler,
|
//! RelayConfig {
|
||||||
//! RelayConfig {
|
//! downstream_data_type: TCPDataType::TLS,
|
||||||
//! downstream_data_type: TCPDataType::TLS,
|
//! upstream_data_type: TCPDataType::TLS,
|
||||||
//! upstream_data_type: TCPDataType::TLS,
|
//! bind_host: "0.0.0.0".to_string(),
|
||||||
//! bind_host: "0.0.0.0".to_string(),
|
//! bind_port: "443".to_string(),
|
||||||
//! bind_port: "443".to_string(),
|
//! remote_host: |_| "remote.com",
|
||||||
//! remote_host: |_| "remote.com",
|
//! remote_port: "443".to_string(),
|
||||||
//! remote_port: "443".to_string(),
|
//! tls_config: TLSConfig::FILE {
|
||||||
//! tls_config: TLSConfig::FILE {
|
//! certificate_path: "./tls.crt".to_string(),
|
||||||
//! certificate_path: "./tls.crt".to_string(),
|
//! private_key_path: "./tls.key".to_string(),
|
||||||
//! private_key_path: "./tls.key".to_string(),
|
|
||||||
//! },
|
|
||||||
//! },
|
//! },
|
||||||
//! );
|
//! },
|
||||||
|
//! );
|
||||||
//!
|
//!
|
||||||
//! // Start listening
|
//! // Start listening
|
||||||
//! relay.start();
|
//! relay.start();
|
||||||
//! }
|
|
||||||
//! ```
|
//! ```
|
||||||
|
|
||||||
use openssl::{
|
use openssl::{
|
||||||
|
|
@ -146,6 +144,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,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
12
src/relay.rs
12
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.clone();
|
let rhost = self.config.remote_host;
|
||||||
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,10 +38,11 @@ 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.clone();
|
let r_host = rhost;
|
||||||
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) => {
|
||||||
|
|
@ -90,7 +91,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.clone();
|
let r_host = rhost;
|
||||||
let r_port = rport.clone();
|
let r_port = rport.clone();
|
||||||
|
|
||||||
let this_conn_id = conn_id;
|
let this_conn_id = conn_id;
|
||||||
|
|
@ -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 \
|
||||||
|
|
|
||||||
14
src/tcp.rs
14
src/tcp.rs
|
|
@ -311,9 +311,8 @@ 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: {}",
|
||||||
format!("{}:{}", remote_host, remote_port),
|
remote_host, remote_port, e
|
||||||
e
|
|
||||||
)
|
)
|
||||||
.as_str(),
|
.as_str(),
|
||||||
);
|
);
|
||||||
|
|
@ -321,7 +320,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)));
|
||||||
return Ok(DataStreamType::RAW(s));
|
Ok(DataStreamType::RAW(s))
|
||||||
}
|
}
|
||||||
TCPDataType::TLS => {
|
TCPDataType::TLS => {
|
||||||
let mut sslbuilder = SslConnector::builder(SslMethod::tls()).unwrap();
|
let mut sslbuilder = SslConnector::builder(SslMethod::tls()).unwrap();
|
||||||
|
|
@ -334,9 +333,8 @@ 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: {}",
|
||||||
format!("{}:{}", remote_host, remote_port),
|
remote_host, remote_port, e
|
||||||
e
|
|
||||||
)
|
)
|
||||||
.as_str(),
|
.as_str(),
|
||||||
);
|
);
|
||||||
|
|
@ -357,7 +355,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)));
|
||||||
return Ok(DataStreamType::TLS(s));
|
Ok(DataStreamType::TLS(s))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue