From ced153a180a2acd656d6eab4d3c63511017001d0 Mon Sep 17 00:00:00 2001 From: Kleo Dev Date: Thu, 14 Aug 2025 20:34:21 +0200 Subject: [PATCH] Tls --- src/lib.rs | 4 +++- src/main.rs | 45 +++++++++------------------------------------ src/tls.rs | 25 +++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 37 deletions(-) create mode 100644 src/tls.rs diff --git a/src/lib.rs b/src/lib.rs index 5f22aad..efc0d9f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1 +1,3 @@ -pub fn request(gateway: &str) {} \ No newline at end of file +pub mod tls; + +pub fn request(gateway: &str) {} diff --git a/src/main.rs b/src/main.rs index ffc990c..63337a4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,43 +1,16 @@ -// Cargo.toml dependencies: -// rustls = "0.31" -// rustls-native-certs = "0.8" +use std::io::{Read, Write}; -use rustls::ClientConfig; +use ghostnet_rs::tls; use rustls::Stream; -use rustls::client::ClientConnection; -use rustls::server::CertificateType; -use rustls_native_certs; -use std::{ - io::{Read, Write}, - net::TcpStream, - sync::Arc, -}; -fn main() -> Result<(), Box> { - // Load native certificates - let certs = rustls_native_certs::load_native_certs() - .expect("could not load platform certificate store"); - let mut root_store = rustls::RootCertStore::empty(); - for cert in certs { - root_store.add(cert).unwrap(); - } - - // Build TLS client config - let config = ClientConfig::builder() - // .with_safe_defaults() - .with_root_certificates(root_store) - .with_no_client_auth(); - - let arc_cfg = Arc::new(config); - let server_name = "example.com".try_into()?; - let mut conn = ClientConnection::new(arc_cfg, server_name)?; - let mut tcp = TcpStream::connect("example.com:443")?; +fn main() { + let (mut conn, mut tcp) = tls::mask_tls("github.com").unwrap(); let mut tls = Stream::new(&mut conn, &mut tcp); - tls.write_all(b"GET / HTTP/1.0\r\nHost: example.com\r\n\r\n")?; - let mut resp = Vec::new(); - tls.read_to_end(&mut resp)?; - println!("{}", String::from_utf8_lossy(&resp)); + tls.write_all("GET / HTTP/1.0\r\nHost: github.com\r\n\r\n".as_bytes()) + .unwrap(); - Ok(()) + let mut resp = Vec::new(); + tls.read_to_end(&mut resp).unwrap(); + println!("{}", String::from_utf8_lossy(&resp)); } diff --git a/src/tls.rs b/src/tls.rs new file mode 100644 index 0000000..15d50df --- /dev/null +++ b/src/tls.rs @@ -0,0 +1,25 @@ +use rustls::ClientConfig; +use rustls::client::ClientConnection; +use rustls_native_certs; +use std::{net::TcpStream, sync::Arc}; + +pub fn mask_tls<'a>( + addr: &str, +) -> Result<(ClientConnection, TcpStream), Box> { + let certs = rustls_native_certs::load_native_certs() + .expect("could not load platform certificate store"); + let mut root_store = rustls::RootCertStore::empty(); + for cert in certs { + root_store.add(cert).unwrap(); + } + + // Build TLS client config + let config = ClientConfig::builder() + .with_root_certificates(root_store) + .with_no_client_auth(); + + let arc_cfg = Arc::new(config); + let conn = ClientConnection::new(arc_cfg, addr.to_owned().try_into()?)?; + let tcp = TcpStream::connect(addr.to_owned() + ":443")?; + Ok((conn, tcp)) +}