金融界2025年8月15日消息,国家知识产权局信息显示,本溪威尔堆焊制造有限公司取得一项名为“一种焊丝盘放装置”的专利,授权公告号CN22322263...
2025-08-16 0
Rust Axum:多域名https 443服务器实战
[package]name = "actixweb443"version = "0.1.0"edition = "2024"[dependencies]actix-web = { version = "4.9", features = ["rustls-0_23"] }rustls = { version = "0.23", features = ["ring"] }tokio-rustls = "0.26"tracing = "0.1"tracing-subscriber = { version = "0.3", features = ["env-filter"] }
use actix_web::{web, App, HttpRequest, HttpResponse, HttpServer};use rustls::{ crypto::ring::{default_provider, sign::any_supported_type}, pki_types::{CertificateDer, PrivateKeyDer}, server::ResolvesServerCert, sign::CertifiedKey, ServerConfig,};use std::{ path::PathBuf, sync::Arc,};use tokio_rustls::rustls::pki_types::pem::PemObject;use tracing::{info, warn};use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};#[actix_web::main]async fn main() -> std::io::Result<()> { // Set the default crypto provider to ring default_provider() .install_default() .expect("Failed to install default ring crypto provider"); // Initialize tracing for logging tracing_subscriber::registry() .with( tracing_subscriber::EnvFilter::try_from_default_env() .unwrap_or_else(|_| "actixweb443=debug".into()), ) .with(tracing_subscriber::fmt::layer()) .init(); // Create a resolver for multiple certificates let cert_resolver = Arc::new(MultiDomainCertResolver::new(vec![ ( "www.5a8.com", PathBuf::from("D:\\wwwroot\\www.5a8.com\\certs\\www.5a8.com-key.pem"), PathBuf::from("D:\\wwwroot\\www.5a8.com\\certs\\www.5a8.com-cert.pem"), ), ( "www.9a8.com", PathBuf::from("D:\\wwwroot\\www.5a8.com\\certs\\www.9a8.com-key.pem"), // Update if path differs PathBuf::from("D:\\wwwroot\\www.5a8.com\\certs\\www.9a8.com-cert.pem"), // Update if path differs ), ])); // Configure TLS with rustls let mut rustls_config = ServerConfig::builder() .with_no_client_auth() .with_cert_resolver(cert_resolver); rustls_config.alpn_protocols = vec![b"h2".to_vec(), b"http/1.1".to_vec()]; // Bind to port 4431 for testing let bind = "0.0.0.0:4431"; info!("HTTPS server listening on {bind}. To contact: curl -k https://localhost:4431"); // Set up Actix Web server HttpServer::new(|| { App::new().route("/", web::get().to(handler)) }) .bind_rustls_0_23(bind, rustls_config)? .run() .await}async fn handler(_req: HttpRequest) -> HttpResponse { info!("Handling request: {:?}", _req); HttpResponse::Ok().body("Hello, HTTPS with Actix Web!")}// Custom certificate resolver for multiple domains#[derive(Debug)]struct MultiDomainCertResolver { certs: Vec<(String, Arc<CertifiedKey>)>,}impl MultiDomainCertResolver { fn new(domains: Vec<(&str, PathBuf, PathBuf)>) -> Self { let certs = domains .into_iter() .map(|(domain, key_path, cert_path)| { // Load private key let key = PrivateKeyDer::from_pem_file(&key_path) .expect(&format!("Failed to read private key for {}", domain)); // Load certificates let certs = CertificateDer::pem_file_iter(&cert_path) .expect(&format!("Failed to read certificate for {}", domain)) .map(|cert| cert.expect(&format!("Invalid certificate format for {}", domain))) .collect::<Vec<_>>(); let signing_key = any_supported_type(&key) .expect(&format!("Failed to create signing key for {}", domain)); let certified_key = CertifiedKey::new(certs, signing_key); (domain.to_string(), Arc::new(certified_key)) }) .collect(); MultiDomainCertResolver { certs } }}impl ResolvesServerCert for MultiDomainCertResolver { fn resolve( &self, client_hello: rustls::server::ClientHello, ) -> Option<Arc<CertifiedKey>> { let server_name = client_hello.server_name().map(|s| s.to_string()); info!("Received SNI: {:?}", server_name); server_name.clone().and_then(|name| { self.certs .iter() .find(|(domain, _)| domain == &name) .map(|(_, cert)| cert.clone()) }) .or_else(|| { warn!("No certificate found for SNI: {:?}", server_name); None }) }}
相关文章
金融界2025年8月15日消息,国家知识产权局信息显示,本溪威尔堆焊制造有限公司取得一项名为“一种焊丝盘放装置”的专利,授权公告号CN22322263...
2025-08-16 0
金融界2025年8月15日消息,国家知识产权局信息显示,渭南陕煤启辰科技有限公司申请一项名为“一种煤矿井下沿空留巷机械化堆喷成墙及其施工方法”的专利,...
2025-08-16 0
金融界2025年8月15日消息,国家知识产权局信息显示,南昌科晨电力试验研究有限公司取得一项名为“基于工业CT检测的瓷绝缘子微缺陷智能诊断系统及方法”...
2025-08-16 0
金融界2025年8月15日消息,国家知识产权局信息显示,中铁十二局集团有限公司、中铁十二局集团第七工程有限公司申请一项名为“靶标编码方法及靶灯图像的解...
2025-08-16 0
亲,这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到-人的牌一样。所以很多小伙伴就怀疑这...
2025-08-16 0
就在与普京会面前夕,特朗普又有新想法。当地时间周五,美国总统特朗普表示,他将在未来两周内对进口芯片和半导体征收关税。特朗普:下周将对钢铁、芯片加关税进...
2025-08-16 0
2025年8月13日,河南郑州一家面馆因“续面风波”登上热搜。事件起因是一名女子带着5名孩子和另一名大人来到餐馆,仅点了一碗售价13元的饸饹面,并利用...
2025-08-16 0
金融界2025年8月15日消息,国家知识产权局信息显示,苏州材装半导体设备有限公司取得一项名为“真空泵冷却系统”的专利,授权公告号CN22322747...
2025-08-16 0
发表评论