mirror of
https://github.com/YGGverse/agate.git
synced 2026-04-08 20:45:29 +00:00
Make TLS config global
This commit is contained in:
parent
8d09b268f9
commit
a165e8e142
3 changed files with 21 additions and 16 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -6,6 +6,7 @@ version = "1.0.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-std",
|
"async-std",
|
||||||
"async-tls",
|
"async-tls",
|
||||||
|
"lazy_static",
|
||||||
"rustls",
|
"rustls",
|
||||||
"url",
|
"url",
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ edition = "2018"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
async-tls = "0.7.0"
|
async-tls = "0.7.0"
|
||||||
async-std = "1.5"
|
async-std = "1.5"
|
||||||
|
lazy_static = "1.4"
|
||||||
rustls = "0.17.0"
|
rustls = "0.17.0"
|
||||||
url = "2.1"
|
url = "2.1"
|
||||||
|
|
||||||
|
|
|
||||||
35
src/main.rs
35
src/main.rs
|
|
@ -5,6 +5,7 @@ use {
|
||||||
task,
|
task,
|
||||||
},
|
},
|
||||||
async_tls::{TlsAcceptor, server::TlsStream},
|
async_tls::{TlsAcceptor, server::TlsStream},
|
||||||
|
lazy_static::lazy_static,
|
||||||
rustls::internal::pemfile::{certs, pkcs8_private_keys},
|
rustls::internal::pemfile::{certs, pkcs8_private_keys},
|
||||||
std::{
|
std::{
|
||||||
error::Error,
|
error::Error,
|
||||||
|
|
@ -19,37 +20,25 @@ use {
|
||||||
pub type Result<T=()> = std::result::Result<T, Box<dyn Error + Send + Sync>>;
|
pub type Result<T=()> = std::result::Result<T, Box<dyn Error + Send + Sync>>;
|
||||||
|
|
||||||
fn main() -> Result {
|
fn main() -> Result {
|
||||||
let certs = certs(&mut BufReader::new(File::open("tests/cert.pem")?))
|
|
||||||
.expect("Error reading certificate file");
|
|
||||||
let mut keys = pkcs8_private_keys(&mut BufReader::new(File::open("tests/key.rsa")?))
|
|
||||||
.expect("Error reading private key file");
|
|
||||||
|
|
||||||
let mut config = rustls::ServerConfig::new(rustls::NoClientAuth::new());
|
|
||||||
config.set_single_cert(certs, keys.remove(0))?;
|
|
||||||
let acceptor = TlsAcceptor::from(Arc::new(config));
|
|
||||||
|
|
||||||
let addr = "localhost:1965";
|
let addr = "localhost:1965";
|
||||||
|
|
||||||
task::block_on(async {
|
task::block_on(async {
|
||||||
let listener = TcpListener::bind(addr).await?;
|
let listener = TcpListener::bind(addr).await?;
|
||||||
let mut incoming = listener.incoming();
|
let mut incoming = listener.incoming();
|
||||||
|
|
||||||
while let Some(stream) = incoming.next().await {
|
while let Some(Ok(stream)) = incoming.next().await {
|
||||||
let acceptor = acceptor.clone();
|
|
||||||
let stream = stream?;
|
|
||||||
task::spawn(async {
|
task::spawn(async {
|
||||||
if let Err(e) = connection(acceptor, stream).await {
|
if let Err(e) = connection(stream).await {
|
||||||
eprintln!("Error: {:?}", e);
|
eprintln!("Error: {:?}", e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn connection(acceptor: TlsAcceptor, stream: TcpStream) -> Result {
|
async fn connection(stream: TcpStream) -> Result {
|
||||||
let mut stream = acceptor.accept(stream).await?;
|
let mut stream = TLS_ACCEPTOR.accept(stream).await?;
|
||||||
let url = match parse_request(&mut stream).await {
|
let url = match parse_request(&mut stream).await {
|
||||||
Ok(url) => url,
|
Ok(url) => url,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
|
@ -70,6 +59,20 @@ async fn connection(acceptor: TlsAcceptor, stream: TcpStream) -> Result {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lazy_static! {
|
||||||
|
static ref TLS_ACCEPTOR: TlsAcceptor = {
|
||||||
|
let cert_file = File::open("tests/cert.pem").unwrap();
|
||||||
|
let certs = certs(&mut BufReader::new(cert_file)).unwrap();
|
||||||
|
|
||||||
|
let key_file = File::open("tests/key.rsa").unwrap();
|
||||||
|
let mut keys = pkcs8_private_keys(&mut BufReader::new(key_file)).unwrap();
|
||||||
|
|
||||||
|
let mut config = rustls::ServerConfig::new(rustls::NoClientAuth::new());
|
||||||
|
config.set_single_cert(certs, keys.remove(0)).unwrap();
|
||||||
|
TlsAcceptor::from(Arc::new(config))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
async fn parse_request(stream: &mut TlsStream<TcpStream>) -> Result<Url> {
|
async fn parse_request(stream: &mut TlsStream<TcpStream>) -> Result<Url> {
|
||||||
let mut stream = async_std::io::BufReader::new(stream);
|
let mut stream = async_std::io::BufReader::new(stream);
|
||||||
let mut request = String::new();
|
let mut request = String::new();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue