commit bbd0035eb417fd1ffe5401203d502eed218bc75b
parent f89d2179a9e3978d2c7d609e016e07b99ea0be69
Author: Matt Brubeck <mbrubeck@limpet.net>
Date: Sun, 17 May 2020 09:04:58 -0700
WIP: Add SSL config
Diffstat:
6 files changed, 120 insertions(+), 9 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
@@ -6,6 +6,7 @@ version = "1.0.0"
dependencies = [
"async-std",
"async-tls",
+ "rustls",
]
[[package]]
diff --git a/Cargo.toml b/Cargo.toml
@@ -13,6 +13,7 @@ edition = "2018"
[dependencies]
async-tls = "0.7.0"
async-std = "1.5"
+rustls = "0.17.0"
[profile.release]
lto = true
diff --git a/src/lib.rs b/src/lib.rs
@@ -1,7 +0,0 @@
-use {
- std::{
- error::Error,
- },
-};
-
-pub type Result<T=()> = std::result::Result<T, Box<dyn Error>>;
diff --git a/src/main.rs b/src/main.rs
@@ -1,5 +1,39 @@
-use agate::Result;
+use {
+ async_std::{
+ net::TcpListener,
+ prelude::*,
+ task::block_on,
+ },
+ rustls::{
+ internal::pemfile::{certs, rsa_private_keys},
+ },
+ std::{
+ error::Error,
+ fs::File,
+ io::BufReader,
+ },
+};
+
+pub type Result<T=()> = std::result::Result<T, Box<dyn Error>>;
fn main() -> Result {
- Ok(())
+ let certs = certs(&mut BufReader::new(File::open("tests/cert.pem")?))
+ .expect("Error reading certificate file");
+ let mut keys = rsa_private_keys(&mut BufReader::new(File::open("tests/key.pem")?))
+ .expect("Error reading private key file");
+
+ let mut config = rustls::ServerConfig::new(rustls::NoClientAuth::new());
+ config.set_single_cert(certs, keys.remove(0))?;
+
+ let addr = "0.0.0.0:1965";
+
+ block_on(async {
+ let listener = TcpListener::bind(addr).await?;
+ let mut incoming = listener.incoming();
+
+ while let Some(stream) = incoming.next().await {
+ }
+
+ Ok(())
+ })
}
diff --git a/tests/cert.pem b/tests/cert.pem
@@ -0,0 +1,30 @@
+-----BEGIN CERTIFICATE-----
+MIIFKjCCAxKgAwIBAgIUE0lnPid9xoVSHKo+93XpJcM0/ckwDQYJKoZIhvcNAQEL
+BQAwHDEaMBgGA1UEAwwRZ2VtaW5pLmxpbXBldC5uZXQwHhcNMjAwNTE3MTU0ODQx
+WhcNMzAwNTE1MTU0ODQxWjAcMRowGAYDVQQDDBFnZW1pbmkubGltcGV0Lm5ldDCC
+AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOwdGFm7PlGads7JzTnQgGoT
+3f3/LXL9i242BsUpKQk3sihciLBruoSlB8lOjb6X1+Ovlc5uUdAMiQzcg4htiiQa
+lmsZmzokTvL4+NDGKXZS/sGimkB0D8LQjQhEA4RD4AnhBbeQ4oJEGn8Q9VOTkVKZ
+nVL5rP5ScEEfGMlR1CUSq9iNg3r2ZhI138/aNrgDytcUlDXUSZpKeERZOu7fJMLN
+LUMS/HFragq1blMZEej2hiAtmwQKPiyvUSjczhg4Ui+pYzJuwBPVq5bR4uCA9jLv
+ohjJpS31SGErDhIVivnRBlEFSftdDgjrjmP0IQUFAFUZilfTqtLWEXJyXrHa8+Kf
+7g51eU0pYeyDm4O4WdSm6joQXqPStpQ03chFcK6fN+2UgHvDgy8O8H1aAtDBxsXF
+G2mRtoDglkOaeecC/okDHtwKGbxkEP5ebhivytK51KEIF4Yhf+rTVe66MgHLTvi6
+2BW5JymAclWMnpOQTQOfp/PFYe8S6FSCxeBAqgxvQjgUrIBFCcRlVyubxCWapd+0
+P0CgAR9dl9ZcWW0RCQK/vSGpQT7sqFFCMnhZabZY8PIUsu3z0O3N/9nLQe/RXqH0
+EvRCJUq545kYYuaSUqfa00fnkbVbFGWByVni+hprIrRj6YEH5GrALjKQaF4t9k/z
+ZhNwGVzIEhy9Y0Xo2VLtAgMBAAGjZDBiMB0GA1UdDgQWBBTIZa+CJsEYahN/wRd5
+mcY7HzlLfDAfBgNVHSMEGDAWgBTIZa+CJsEYahN/wRd5mcY7HzlLfDAPBgNVHRMB
+Af8EBTADAQH/MA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQELBQADggIBAG40
+/1s0QGmsIrT2HRcNVm7/Py8b1lIka3uQYY/ZW9xQQTwFtXvdXYfkafm7hLPbNqmQ
+HGmNLIFGrgZjKW7F/28fG5V6wGSawx5LBPpT1oPS6p2tFKKFKV9c8MP7J/g2Q0q5
+LTes1PPTa1fqkqZwpMGAAOaTtmX+DJfjxbJZ0/T0vP5NjbeqVSnKil40QBRWcPPT
+0qoJaYUkowMUu2LvhpkpIW/P8A68oM3z7/gmwP/YALIVXXIkdevUbEdqlwkjaOkF
+DQZYlmNhiTnaJnOu16LaVrCkC/vAtaHVCYsKftjYH+/BfcdFqFffnWrn+j6/NFfy
+NRvSEbzSjdH+h/0zT+kLLIih/vovF3WVNGjNk+JlZgVdDvJyuKlMTiAyPq12HOSE
+yQ3oHBKvk+iQekCkuDRga9BDgfsvMlIhrH4VZ85AU+yy/HzcBAB4nlFhD3vsopHm
+mpEuhMrmdN4FhGAsNJKYE3St6H+1eVuWR2c2KlA2EDSVJU0qaINzhChU79KpTfkb
+F3TdRiebTjgUGJylqggp5SN/YyJ30g+DdePPBf9MXbJmWEzI/iKvqlspVNy41chP
+Z4/8jXiCavZQ5e+1FeVIWFRNKxPkl9Wlr4UdtItte6jkG7r+Zy0O4DyFkzzNg4Gk
+OKpARqWVkqyOVEaMPv/ypZwpeNPhQQupITCu/x/7
+-----END CERTIFICATE-----
diff --git a/tests/key.pem b/tests/key.pem
@@ -0,0 +1,52 @@
+-----BEGIN PRIVATE KEY-----
+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
+xaJIiFfR55tTOf5rMJA4NmeL8rdrTt8=
+-----END PRIVATE KEY-----