118 行
8.9 KiB
Markdown
118 行
8.9 KiB
Markdown
# CHANGELOG
|
||
|
||
本项目 (PazeSSL / PazeSSH) 的变更记录。格式参考 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/);版本号按里程碑独立标注(仓库未打 tag,以日期与功能阶段为准)。
|
||
|
||
## [开发主线] — 2026-08-14
|
||
|
||
### 新增 —— 自动重连(实用版)
|
||
|
||
- `pssh ssh -o ReconnectInterval=N`:断线(keepalive 心跳发送失败判定)时由外层循环自动重连并**重新执行命令/重开 shell**(`pssh_cmd_ssh` 返回 -2 触发)。
|
||
- 说明:依赖 `ServerAliveInterval` 心跳探测(建议配 `-o ServerAliveInterval=N -o ReconnectInterval=N`);恢复的是"重连+重跑",不能恢复进行中的 PTY 状态。
|
||
|
||
### 新增 —— agent 转发(-A)
|
||
|
||
- `pssh ssh -A`:打开 `auth-agent@openssh.com` 通道,事件循环把本地 agent socket 与通道双向桥接(`ssh_agent_fd` 暴露 POSIX fd)。
|
||
- 平台限制:PazeSSH 在 **POSIX** 上可用;Windows 上 agent 为命名管道、无可供 select 的 fd,**运行时明确禁用并提示**(不崩溃)。
|
||
- 无本地 agent 时给出明确提示(`cannot connect local agent`)。
|
||
|
||
### 新增 —— keyboard-interactive 认证 (RFC 4256)
|
||
|
||
- 客户端:password 失败后 fallback 到 keyboard-interactive(发请求、收 `USERAUTH_INFO_REQUEST`、以密码响应首个 prompt)。
|
||
- 服务端:方法列表含 `keyboard-interactive`,收发 `INFO_REQUEST/INFO_RESPONSE` 并复用用户库密码校验;`psshd -kbdint` 可强制仅接受 ki(测试/策略)。
|
||
- 验证:`pssh -pwd` 连 `psshd -kbdint` 时经 keyboard-interactive 认证成功(exit 0,命令正常执行)。
|
||
|
||
### 新增 —— 长连接保活 + fail2ban 兼容
|
||
|
||
- **keepalive 保活**:`pssh ssh` 新增 `-o ServerAliveInterval=N`(默认 15s,0=禁用),空闲时定时发 `keepalive@openssh.com` global request(`ssh_keepalive_send`,fire-and-forget),保持空闲连接不被 NAT/防火墙回收;服务端对 GLOBAL_REQUEST 回包形成保活闭环。
|
||
- **fail2ban 兼容**:`psshd` 认证失败日志对齐 OpenSSH 格式(`Invalid user X from <IP> port N ssh2` / `Failed password for X from <IP> port N ssh2`),并记录对端 IP(`ssh_session_set_peer_ip`),可用 fail2ban 默认 `sshd` filter 封禁。
|
||
|
||
### 新增 —— SSH config 兼容读取 + ECDSA KAT 基线
|
||
|
||
- `pssh ssh` config 读取优先级:`-F <file>` > `~/.ssh/config`(OpenSSH 兼容) > `~/.pssh/config.conf`;支持 `Host/HostName/Port/User/IdentityFile/ProxyJump/StrictHostKeyChecking`。
|
||
- 新增可重复回归脚本 `build/run_ecdsa_selfcheck.ps1`(KAT 基线):对 P-256/384/521 各跑 ECDSA sign→verify 自洽,作为防回归基线。
|
||
|
||
### 新增 —— TLS 1.3 会话恢复持久化
|
||
|
||
- session ticket key:新增 `paze_tls_config_set_session_ticket_file`(持久化文件)与 `paze_tls_ensure_ticket_key`(首次生成时读取/写盘,PSK 验证入口亦加载),服务端**跨进程重启**后 ticket 仍可校验、会话恢复继续有效。
|
||
- CLI:`pazessl s_server -ticket_file <file>`。端到端验证:重启服务端(同 ticket 文件)后 `resumed=YES`。
|
||
|
||
### 新增 —— session ticket key 轮换
|
||
|
||
- 支持 2 代 ticket key:新增 `paze_tls_config_rotate_ticket_key`(当前 key 转上一位、新 key 装当前;写盘 2×32 字节);验证用所有已就绪 key 遍历匹配 MAC,轮换后旧 ticket 仍由上一代 key 平滑验证。
|
||
- CLI:`pazessl s_server -rotate_ticket_key`。验证:轮换后旧会话仍恢复 + 新会话跨进程恢复。
|
||
|
||
### 新增 —— TLS secp521r1 (P-521) 完整链路
|
||
|
||
- 新增 P-521 椭圆曲线:`src/crypto/p521.c` + `include/paze/p521.h`(域 p = 2^521-1,标量/仿射点 66/133 字节,常量时间标量乘;非整字节对齐,标量乘按大端位遍历)。
|
||
- ECDSA 支持 P-521 签名/验签(RFC 6979 确定性 k,配合 SHA-512)与 RFC 5915 私钥解析(`paze_ecdsa_p521_sign/verify`、`paze_ecdsa_p521_priv_from_pem/der`)。
|
||
- X.509 支持 secp521r1 证书解析、验签与签发(`pk_kind==ECDSA_P521`、`ecdsa_p521_pub[133]`、`paze_x509_build_spki521`、签发者 `ecdsa_d521[66]`、ecdsa-with-SHA512)。
|
||
- TLS 1.3 支持 secp521r1 命名组与签名算法:
|
||
- 组 `0x0019`(`PAZE_TLS_GROUP_SECP521R1`)纳入 key_share / supported_groups / ECDH(按 SEC1 x 坐标,66 字节) / HelloRetryRequest / 服务端组选择。
|
||
- 签名算法 `PAZE_TLS_SIG_ECDSA_SECP521R1_SHA512 (0x0603)` 纳入 CertificateVerify 签发与验签。
|
||
- TLS 1.2 ECDHE 亦支持 P-521 组。
|
||
- CLI:`pazessl s_client -key_share P-521`。
|
||
- 验证:曲线(n·G=∞、3G=2G+G)、ECDSA 双向(OpenSSL 验我的签名 + 我验 OpenSSL 签名)、X.509 P-521 自签名证书 OpenSSL `verify=OK`、TLS 端点 P-521 密钥交换(hrr=YES)+ 证书链/主机名验证全部通过;既有自测无回归。
|
||
|
||
## [开发主线] — 2026-08-13
|
||
|
||
### 新增 —— TLS secp384r1 (P-384) 完整链路
|
||
|
||
- 新增 P-384 椭圆曲线:`src/crypto/p384.c` + `include/paze/p384.h`(Jacobian 点运算、常量时间标量乘、仿射编解码,结构与 p256 对齐)。
|
||
- ECDSA 支持 P-384 签名/验签(RFC 6979 确定性 k)与 RFC 5915 私钥解析(`paze_ecdsa_p384_sign/verify`、`paze_ecdsa_p384_priv_from_pem/der`)。
|
||
- X.509 支持 secp384r1 证书解析、验签与签发(`pk_kind==ECDSA_P384`、`paze_x509_build_spki384`、签发者 `ecdsa_d384`)。
|
||
- TLS 1.3 支持 secp384r1 命名组与签名算法:
|
||
- 组 `0x0018`(`PAZE_TLS_GROUP_SECP384R1`)纳入 key_share / supported_groups / ECDH(按 SEC1 x 坐标) / HelloRetryRequest / 服务端组选择。
|
||
- 签名算法 `PAZE_TLS_SIG_ECDSA_SECP384R1_SHA384 (0x0503)` 纳入 CertificateVerify 签发与验签。
|
||
- TLS 1.2 ECDHE 亦支持 P-384 组。
|
||
- CLI:`pazessl s_client -key_share P-384`。
|
||
- 验证:曲线、ECDSA、X.509 证书均与 OpenSSL 双向交叉验证;TLS 端点 P-384 密钥交换(hrr=YES)+ 证书链/主机名验证通过,既有自测无回归。
|
||
|
||
### 修复
|
||
|
||
- **ECDSA `bits2int`**:输入(摘要)短于群阶 `qlen` 时应右对齐填充,而非左移;此前会导致 P-384 + SHA-256 场景验签错误。
|
||
- **对端证书 DER 生命周期**:新增 `paze_tls_store_peer_cert`,将证书 DER 拷贝到自有缓冲,避免 `issuer_dn/subject_dn/tbs_der` 等指针指向被记录层复用的缓冲,导致 TLS 1.3 / 1.2 客户端证书链验证失败。
|
||
|
||
### 其他
|
||
|
||
- 新增 `CHANGELOG.md`;更新 `STATUS.md` / `AGENT.md`。
|
||
- 规则:Git 推送仅发往 parlz(gitea),不再提交 origin(GitHub)。
|
||
- **SSH ProxyJump**:确认 `-J` 代理跳板(单跳)核心链路已实现并同步到文档;新增 `pssh ssh -W host:port`(标准 I/O 转发/netcat 模式,目标 TCP 隧道桥接本地 stdio)与 `-N`(不执行远程命令、仅端口转发,配合 `-L/-R/-D`)。说明:`-J` 接受逗号分隔的多跳语法,但多级级联跳板在同步 I/O 架构下的应用数据阶段交互不稳定,当前会打印警告并退化为**仅第一跳**的稳定单跳。
|
||
|
||
## [功能阶段] — 2026-08(TLS 1.3 完善期)
|
||
|
||
### 新增
|
||
|
||
- **TLS 1.3 0-RTT 数据路径**(RFC 8446 §4.2.10 / §4.5 / §8):
|
||
- 客户端 `early_data` 扩展、握手前早数据发送、EndOfEarlyData(early 密钥加密并计入 transcript)。
|
||
- 服务端 early_read 解密接受早数据;`-early` / `-sess_in` / `-sess_out` 选项。
|
||
- 公共 API:`paze_tls_config_enable_early_data`、`paze_tls_early_write`、`paze_tls_early_data_accepted`、`paze_tls_early_data_len`、`paze_tls_hrr_occurred`。
|
||
- 端到端验证通过(early accepted + hrr=YES)。
|
||
- **HRR(HelloRetryRequest)**(RFC 8446 §4.1.3 / §4.1.4):
|
||
- 服务端 key_share 不匹配时发送 HRR(固定魔数 random)、transcript 合成 MessageHash 重放、客户端 CH2(仅选定组 share)响应、HRR 后放弃 0-RTT。
|
||
- **TLS 1.3 PSK 会话恢复**(RFC 8446 §4.2.11 / §4.6.1):
|
||
- NewSessionTicket 签发与解析、ticket + binder 校验、selected_identity 回选、恢复握手跳过证书;`-sess_in` / `-sess_out` 端到端验证。
|
||
- TLS 1.3 SHA-384 密码套件(`TLS_AES_256_GCM_SHA384`)服务端/客户端握手。
|
||
|
||
### 修复
|
||
|
||
- TLS 1.3 ECDSA 证书互操作:CertificateVerify 改用 DER 签名(RFC 8446 §4.2.3),补齐 NewSessionTicket extensions,支持 X.509 ECDSA 证书验签。
|
||
|
||
### 构建 / 其他
|
||
|
||
- 构建输出移至 `bin/`;新增 standalone 命令(pscp/pkeygen/pkeyscan/pcopy-id/pagent/padd/psshd)与 psftp 客户端。
|
||
- 新增 `STATUS.md` 完成度文档。
|
||
|
||
## 早期(TLS 1.2 与 SSH-2 基础)
|
||
|
||
### 新增
|
||
|
||
- TLS 1.2 握手与版本回退(版本回退、ECDHE-RSA/ECDSA/RSA AES-GCM、CHACHA20-POLY1305)。
|
||
- SSH-2 完整协议栈:transport / kex / auth / channel,含 SFTP 子系统 v3,与 OpenSSH / Git sftp / scp 互操作。
|
||
- 密码学原语:哈希(SHA-1/256/512/MD5)与 HMAC/HKDF/PBKDF2;对称(AES、ChaCha20-Poly1305);曲线(X25519、Ed25519、P-256);非对称 RSA;X.509 / ASN.1 / PEM/DER。
|
||
- `pssh`、`pazessl` 等多个 CLI 命令。
|
||
|
||
### 修复
|
||
|
||
- TLS 记录层 GCM 实现与 RFC 的偏差。
|
||
- 构建与编译相关修复(如 early key_share 参数不匹配)。
|