Skip to main content

platform/util/
config.rs

1//! TLS 配置实现
2//!
3//! 提供 TLS 服务器配置和加密提供者管理功能
4
5use anyhow::Result;
6use rustls::ServerConfig;
7use rustls_pki_types::{CertificateDer, PrivateKeyDer};
8use std::fs;
9use std::io::BufReader;
10use tokio_rustls::TlsAcceptor;
11
12/// TLS configuration utilities
13pub struct TlsConfigurer;
14
15impl TlsConfigurer {
16    /// 创建 TLS 配置
17    pub fn create_tls_config(cert_path: &str, key_path: &str) -> Result<ServerConfig> {
18        let cert_file = fs::File::open(cert_path)?;
19        let key_file = fs::File::open(key_path)?;
20
21        let mut cert_reader = BufReader::new(cert_file);
22        let mut key_reader = BufReader::new(key_file);
23
24        let cert_chain: Vec<CertificateDer> =
25            rustls_pemfile::certs(&mut cert_reader).collect::<Result<Vec<_>, _>>()?;
26
27        let private_key: PrivateKeyDer = rustls_pemfile::private_key(&mut key_reader)?
28            .ok_or_else(|| anyhow::anyhow!("No private key found"))?;
29
30        let config = ServerConfig::builder()
31            .with_no_client_auth()
32            .with_single_cert(cert_chain, private_key)?;
33
34        Ok(config)
35    }
36
37    /// 创建 Tokio TLS 配置
38    pub fn create_tokio_tls_config(cert_path: &str, key_path: &str) -> Result<TlsAcceptor> {
39        let config = Self::create_tls_config(cert_path, key_path)?;
40        Ok(TlsAcceptor::from(std::sync::Arc::new(config)))
41    }
42
43    /// 安装加密提供程序
44    pub fn install_crypto_provider() {
45        let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();
46    }
47}