Files
2026-05-16 13:24:02 +08:00

14 KiB
Raw Permalink Blame History

SSL/TLS 配置

**本文引用的文件** - [src/index.ts](file://src/index.ts) - [src/server.ts](file://src/server.ts) - [src/class/options.ts](file://src/class/options.ts) - [src/log.ts](file://src/log.ts) - [src/websocket.ts](file://src/websocket.ts) - [package.json](file://package.json) - [run.bat](file://run.bat) - [server.cert](file://server.cert) - [server.key](file://server.key) - [tsconfig.json](file://tsconfig.json)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件围绕当前代码库中的 HTTPS 与证书使用现状,提供一份面向实际部署的 SSL/TLS 配置参考。重点涵盖以下方面:

  • 当前 HTTPS 启用方式与证书加载机制
  • 证书文件位置与格式要求
  • HTTPS 服务器启动参数与运行脚本
  • 与证书相关的配置项与环境变量
  • 为后续扩展 ACME 自动续期、HSTS、OCSP Stapling 等安全加固提供落地建议

说明:当前仓库已内置示例证书与密钥文件,用于本地演示 HTTPS但未包含 Let's Encrypt 或商业证书的自动化流程、ACME 续期脚本等。本文将基于现有实现,给出可操作的扩展路径与最佳实践。

项目结构

与 SSL/TLS 相关的关键文件与职责如下:

  • 证书与密钥server.key、server.cert
  • 应用入口与 HTTPS 启动src/index.ts
  • Express 服务器创建与静态资源src/server.ts
  • 运行脚本与命令行参数package.json、run.bat
  • 日志与选项定义src/log.ts、src/class/options.ts
  • WebSocket 信令服务src/websocket.ts
  • TypeScript 编译配置tsconfig.json
graph TB
A["应用入口<br/>src/index.ts"] --> B["HTTPS 服务器创建<br/>读取 server.key / server.cert"]
A --> C["Express 应用创建<br/>src/server.ts"]
C --> D["静态资源与路由<br/>客户端页面与 API"]
A --> E["WebSocket 信令服务<br/>src/websocket.ts"]
F["运行脚本<br/>package.json"] --> A
G["启动批处理<br/>run.bat"] --> A
H["证书与密钥<br/>server.key / server.cert"] --> B

图表来源

章节来源

核心组件

  • HTTPS 启用与证书加载
    • 在应用入口中,当启用 HTTPS 时,通过读取 server.key 与 server.cert 文件创建 HTTPS 服务器,并监听指定端口。
    • 证书与私钥文件路径可通过命令行参数覆盖,默认值指向项目根目录下的 server.key 与 server.cert。
  • Express 应用与静态资源
    • Express 应用负责提供前端页面、API 接口与静态资源HTTPS 仅影响传输层安全,不影响应用逻辑。
  • 运行脚本与参数
    • package.json 中的 start 脚本默认以 HTTPS 启动,并传入 -s、-p、-k、-c 等参数。
    • run.bat 提供 Windows 环境下的构建与启动流程示例。
  • 日志与选项
    • 日志系统支持多级别输出,便于排障。
    • Options 接口定义了端口、HTTPS 开关、证书与密钥路径、信令类型、日志级别等配置项。

章节来源

架构总览

下图展示了 HTTPS 启动与请求处理的整体流程,以及证书加载与静态资源服务的关系。

sequenceDiagram
participant CLI as "命令行/脚本"
participant App as "应用入口<br/>src/index.ts"
participant HTTPS as "HTTPS 服务器"
participant Express as "Express 应用<br/>src/server.ts"
participant WS as "WebSocket 信令<br/>src/websocket.ts"
CLI->>App : 传入参数(-s/-p/-k/-c)
App->>App : 解析 Options 并校验
App->>HTTPS : 读取 server.key / server.cert 创建 HTTPS 服务器
HTTPS-->>App : 监听端口并输出访问地址
App->>Express : 初始化 Express 应用
Express-->>App : 提供静态资源与 API
App->>WS : 启动 WebSocket 信令服务
Note over HTTPS,Express : 所有请求均通过 HTTPS 传输

图表来源

章节来源

详细组件分析

HTTPS 启动与证书加载

  • 参数解析与默认值
    • HTTPS 开关、端口、证书与密钥路径均可通过命令行参数配置;默认启用 HTTPS。
  • 证书与密钥读取
    • 使用文件系统读取 server.key 与 server.cert作为 HTTPS 服务器的凭据。
  • 启动行为
    • 成功启动后输出 https:// 访问地址;若未启用 HTTPS则输出 http://。
flowchart TD
Start(["应用启动"]) --> Parse["解析命令行参数<br/>确定 HTTPS 与证书路径"]
Parse --> Secure{"是否启用 HTTPS"}
Secure --> |是| LoadCert["读取 server.key / server.cert"]
Secure --> |否| HTTPListen["启动 HTTP 服务器"]
LoadCert --> HTTPSListen["启动 HTTPS 服务器并监听端口"]
HTTPSListen --> LogAddr["输出 https:// 访问地址"]
HTTPListen --> LogAddr
LogAddr --> End(["服务就绪"])

图表来源

章节来源

Express 应用与静态资源

  • CORS 与日志
    • 默认开启跨域与 Morgan 日志记录,日志级别可配置。
  • 路由与静态资源
    • 提供根路径页面、/signaling 信令路由、静态资源目录等。
  • 上传与媒体资源
    • 提供头像上传与静态媒体访问路径。

章节来源

WebSocket 信令服务

  • 与 HTTP 服务器共享底层 TCP 连接
    • WebSocket 服务器依附于同一 HTTP 服务器实例,因此也受 HTTPS 保护。
  • 连接生命周期管理
    • 连接建立、消息分发、断开清理等逻辑由处理器模块完成。

章节来源

运行脚本与参数

  • package.json
    • start 脚本默认以 HTTPS 启动,并传入 -s、-p、-k、-c 等参数。
  • run.bat
    • Windows 环境下先构建再启动,便于本地调试。

章节来源

证书与密钥文件

  • server.key 与 server.cert
    • 示例证书与密钥文件位于项目根目录,用于演示 HTTPS 功能。
    • 请确保文件权限正确,避免被其他用户读取。

章节来源

依赖关系分析

  • 应用入口依赖文件系统读取证书与密钥,依赖 Express 提供 Web 服务,依赖 WebSocket 提供信令通道。
  • Express 应用依赖日志模块与配置模块,提供静态资源与 API。
  • 运行脚本与批处理文件负责编译与启动流程。
graph LR
Index["src/index.ts"] --> FS["文件系统<br/>读取 server.key / server.cert"]
Index --> Express["Express 应用<br/>src/server.ts"]
Express --> Static["静态资源与路由"]
Index --> WS["WebSocket 信令<br/>src/websocket.ts"]
Run["package.json 脚本"] --> Index
Bat["run.bat"] --> Index

图表来源

章节来源

性能考虑

  • 证书与密钥读取
    • 采用同步读取方式,启动阶段一次性加载,运行时无额外 IO 开销。
  • 日志级别
    • 可通过日志级别控制输出量,避免在高并发场景下产生过多 I/O。
  • 静态资源
    • 建议在生产环境中配合反向代理缓存与压缩,提升静态资源访问效率。

章节来源

故障排查指南

  • 无法启动 HTTPS 服务器
    • 检查 server.key 与 server.cert 是否存在且可读。
    • 确认端口未被占用,且进程具备相应权限。
  • 访问出现证书错误
    • 若使用自签名证书,请在浏览器或客户端信任该证书。
    • 确认域名与证书匹配,避免主机名不一致导致的校验失败。
  • 日志定位问题
    • 使用日志模块提供的不同级别输出,结合 Express 的 Morgan 日志,快速定位请求异常。

章节来源

结论

当前代码库已具备基本的 HTTPS 启用能力与证书加载机制,适合在开发与演示环境中使用。若需在生产环境长期稳定运行,建议进一步完善以下方面:

  • 引入 ACME 自动续期(如 acme.sh实现 Let's Encrypt 免费证书的自动化申请与续期。
  • 部署反向代理(如 Nginx/Caddy统一处理 TLS 终止、证书管理与安全头部。
  • 配置 HSTS、OCSP Stapling、前向保密等安全策略提升整体安全性与性能。

附录

证书与密钥文件位置

  • server.keyHTTPS 私钥文件
  • server.certHTTPS 证书文件

章节来源

HTTPS 启动参数与脚本

  • 命令行参数
    • -s/--secure启用 HTTPS
    • -p/--port监听端口
    • -k/--keyfile私钥文件路径
    • -c/--certfile证书文件路径
  • 启动脚本
    • package.json 的 start 脚本默认以 HTTPS 启动
    • run.bat 提供 Windows 环境下的构建与启动流程

章节来源

与证书相关的配置项与环境变量

  • Options 接口定义了 secure、port、keyfile、certfile、type、mode、logging 等配置项
  • 环境变量映射
    • PORT、SECURE、KEYFILE、CERTFILE、TYPE、MODE、LOGGING

章节来源

证书格式与转换(概念性说明)

  • PEM 与 DER
    • PEM 是文本格式DER 是二进制格式;两者可互相转换。
  • PKCS#12
    • 包含私钥与证书链,常用于导入导出。
  • OpenSSL 常用命令(概念性说明)
    • 证书转 DERopenssl x509 -in server.pem -outform DER -out server.der
    • DER 转 PEMopenssl x509 -in server.der -inform DER -out server.pem -outform PEM
    • 生成自签名证书openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
    • 导出 PKCS#12openssl pkcs12 -export -out keystore.p12 -inkey key.pem -in cert.pem

说明:本节为通用概念说明,不直接对应具体源码文件。

Let's Encrypt 与商业证书申请(概念性说明)

  • Let's Encrypt
    • 使用 acme.sh 等工具自动申请与续期免费证书。
  • 商业证书
    • 通过 CA 申请,通常包含中间证书链,需按要求配置证书链文件。
  • 证书链验证
    • 生产环境应提供完整链路,避免中间证书缺失导致校验失败。

说明:本节为通用概念说明,不直接对应具体源码文件。

HTTPS 服务器配置要点(概念性说明)

  • TLS 版本
    • 建议禁用过时版本,启用现代 TLS 1.2/1.3。
  • 加密套件
    • 优先选择支持前向保密的套件,避免弱加密算法。
  • 证书链
    • 确保证书链完整,避免客户端校验失败。

说明:本节为通用概念说明,不直接对应具体源码文件。

证书自动续期方案(概念性说明)

  • acme.sh
    • 支持自动申请、验证与续期,可配置定时任务。
  • 定时任务
    • 使用 crontab 或计划任务定期执行续期检查与重启服务。

说明:本节为通用概念说明,不直接对应具体源码文件。

安全最佳实践(概念性说明)

  • HSTS 头部
    • 设置严格传输安全,提升抗降级攻击能力。
  • OCSP Stapling
    • 减少在线证书状态查询延迟与隐私泄露风险。
  • 前向保密
    • 使用支持 ECDHE 的套件,确保会话密钥不被历史泄露影响。

说明:本节为通用概念说明,不直接对应具体源码文件。