mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 09:20:22 +08:00
feat: aether-proxy TLS 双栈支持与自签名证书自动生成
- aether-proxy 新增 TLS 模块:自签名证书生成、TLS acceptor 构建、证书 SHA-256 指纹计算 - 代理服务器支持 HTTP+TLS 双栈模式,通过 peek 首字节区分 TLS ClientHello 与普通 HTTP - 注册与心跳上报 tls_enabled 和 tls_cert_fingerprint 字段 - Python 侧 httpx 代理适配:TLS 代理使用 httpx.Proxy + CERT_NONE ssl_context - ProxyNode 模型新增 tls_enabled/tls_cert_fingerprint 字段及对应迁移
This commit is contained in:
@@ -5,6 +5,8 @@ SSL 工具函数
|
||||
|
||||
import ssl
|
||||
|
||||
from loguru import logger
|
||||
|
||||
try:
|
||||
import certifi
|
||||
|
||||
@@ -12,6 +14,8 @@ try:
|
||||
except ImportError:
|
||||
_SSL_CONTEXT = ssl.create_default_context()
|
||||
|
||||
_PROXY_SSL_CONTEXT: ssl.SSLContext | None = None
|
||||
|
||||
|
||||
def get_ssl_context() -> ssl.SSLContext:
|
||||
"""
|
||||
@@ -24,3 +28,30 @@ def get_ssl_context() -> ssl.SSLContext:
|
||||
ssl.SSLContext: SSL 上下文
|
||||
"""
|
||||
return _SSL_CONTEXT
|
||||
|
||||
|
||||
def get_proxy_ssl_context(expected_fingerprint: str | None = None) -> ssl.SSLContext:
|
||||
"""
|
||||
获取用于代理连接的 SSL 上下文(连接 aether-proxy TLS 端口)
|
||||
|
||||
当前使用 CERT_NONE(不验证证书),因为 aether-proxy 使用自签名证书。
|
||||
expected_fingerprint 参数预留供未来实现指纹校验。
|
||||
|
||||
Args:
|
||||
expected_fingerprint: 预期的证书 SHA-256 指纹(hex,预留参数)
|
||||
|
||||
Returns:
|
||||
ssl.SSLContext: 代理专用 SSL 上下文
|
||||
"""
|
||||
global _PROXY_SSL_CONTEXT
|
||||
|
||||
if expected_fingerprint:
|
||||
logger.warning("TLS 证书指纹校验尚未实现, fingerprint={} 被忽略", expected_fingerprint)
|
||||
|
||||
if _PROXY_SSL_CONTEXT is None:
|
||||
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
||||
ctx.check_hostname = False
|
||||
ctx.verify_mode = ssl.CERT_NONE
|
||||
_PROXY_SSL_CONTEXT = ctx
|
||||
# TODO: 实现基于 expected_fingerprint 的证书指纹校验
|
||||
return _PROXY_SSL_CONTEXT
|
||||
|
||||
Reference in New Issue
Block a user