1 extern crate native_tls; 2 3 use native_tls::{Identity, TlsAcceptor, TlsStream}; 4 use std::fs::File; 5 use std::io::Read; 6 use std::net::{TcpListener, TcpStream}; 7 use std::sync::Arc; 8 use std::thread; 9 main()10fn main() { 11 let mut file = File::open("identity.pfx").unwrap(); 12 let mut pkcs12 = vec![]; 13 file.read_to_end(&mut pkcs12).unwrap(); 14 let pkcs12 = Identity::from_pkcs12(&pkcs12, "hunter2").unwrap(); 15 16 let acceptor = TlsAcceptor::new(pkcs12).unwrap(); 17 let acceptor = Arc::new(acceptor); 18 19 let listener = TcpListener::bind("0.0.0.0:8443").unwrap(); 20 21 fn handle_client(_stream: TlsStream<TcpStream>) { 22 // ... 23 } 24 25 for stream in listener.incoming() { 26 match stream { 27 Ok(stream) => { 28 let acceptor = acceptor.clone(); 29 thread::spawn(move || { 30 let stream = acceptor.accept(stream).unwrap(); 31 handle_client(stream); 32 }); 33 } 34 Err(_e) => { /* connection failed */ } 35 } 36 } 37 } 38