验证类型:本机回环 TLS 1.3 真实应用交互,不是公网或生产 WebPKI 验证。 命令:python3 lab.py > run.jsonl。仅三个自建 127.0.0.1 随机端口服务,不进行 DNS 查询;实际连接地址与 server_hostname 独立。 环境:macOS 27.0 arm64;Python 3.14.4;Python SSL 与 /opt/homebrew/bin/openssl 均 OpenSSL 3.6.2 7 Apr 2026。 临时生成专用根 CA、独立另一个 CA、根直接签名的叶证书;RSA 2048、SHA256、1 天有效期。根 critical CA:TRUE/pathlen0/keyCertSign/cRLSign/SKI;叶 critical CA:FALSE/digitalSignature、serverAuth、SKI/AKI、SAN DNS:server.lab.test。生成命令和公开叶证书文本/摘要均存日志,私钥只在 TemporaryDirectory,不输出或提交。 客户端 create_default_context(cafile=指定测试CA),不加载系统信任库;实际 cert_store_stats 为 x509=1、x509_ca=1、crl=0。保留默认 STRICT/PARTIAL_CHAIN,verify_flags=557088;check_hostname=true;hostname_checks_common_name=false。叶 CN 故意为 unused-common-name.lab.test,成功验证依据 SAN。 在任何默认上下文创建前删除本进程 SSLKEYLOGFILE 环境项,防止隐式向外部日志路径写 TLS 密钥;本次原环境不存在该项。不修改父进程环境或系统配置。 双方 minimum_version=maximum_version=TLSv1_3。正确 CA 与 server.lab.test 成功协商 TLSv1.3 / TLS_AES_256_GCM_SHA384,真实发送随机 32 字节挑战并逐字节核对回显;服务器实际接收内容独立记录。 正确 CA、wrong.lab.test:客户端 verify_code=62,Hostname mismatch;服务端 SSLV3_ALERT_BAD_CERTIFICATE,phase=handshake,application_exchange_started=false。 错误 CA、正确 server.lab.test:客户端 verify_code=20,unable to get local issuer certificate;服务端 TLSV1_ALERT_UNKNOWN_CA,phase=handshake,application_exchange_started=false。 错误名称中的 SSLV3/TLSV1 是 OpenSSL 错误原因历史符号,不表示降级协商 SSLv3/TLS1.0。本程序将协议限制为 TLS1.3,失败连接不报告已协商应用会话。 最终实际运行 exit 0;每组线程已 join、监听 socket 上下文退出;TemporaryDirectory 清理测试私钥和证书。日志末行 temporary_keys_cleaned=true、owned_listeners_closed=true。 首轮成功,随后补服务端 phase 字段并完整重跑成功;run.jsonl 仅最终轮,随机端口/证书摘要/挑战随运行改变,无失败修复轮。 CLI --help exit0、--self-check exit0、--invalid exit2;Python no-excuse checker 零违规。self-check 只核 TLS1.3 API 可用与 SHA256 已知向量,不能当握手验证。 脚本职责为受限 TLS 身份验收;无新依赖、通用框架或外部服务;边界由标准库 SSL 解析,未使用 Any/cast/忽略类型警告。basedpyright 未安装,不声称类型检查通过。 范围不含中间 CA、CRL/OCSP 吊销、公开信任链、握手逐消息抓包解密、TLS 密钥派生实测、恢复/0-RTT、客户端证书认证、close_notify 验收或性能结论。 参考:当次查 https://docs.python.org/3/library/ssl.html 、https://docs.openssl.org/3.6/man5/x509v3_config/ 。协议机制正文依据 RFC8446 与 RFC9525;实验只对上述实际 API 与应用结果作结论。