Skip to content

feat(tls): expose the peer certificate chain and verification error #45

Closed

Description

@Antruly

背景

uvscope 0.4 的 TLS Inspector 计划展示连接目标的证书链并区分过期、域名不匹配、自签名等失败原因。当前公开面不够:

  • src/ssl/uvcpp_ssl.h:185 的 get_peer_cert_info() 只返回叶证书的 subject / issuer / notBefore / notAfter / SHA-256 指纹;
  • src/ssl/uvcpp_ssl.h:188 的 verify_peer() 只返回 bool,SSL_get_verify_result() 的 X509_V_ERR 被吞掉;
  • uvcpp_tcp_client 和 uvcpp_http_client 都没有公开的 uvcpp_ssl* 访问器(src/web/uvcpp_http_client.h:492 是私有成员),所以使用 http client 的调用方完全拿不到 peer 证书信息。

建议

  1. uvcpp_ssl 增加 peer 证书链导出,例如 peer_cert_chain_der()(叶子在前)或 PEM 版本。
  2. 增加 peer_verify_result()(返回 X509_V_ERR 数值)与 peer_verify_error()(X509_verify_cert_error_string)。
  3. tls_cert_info 可选补充 SAN(DNS / IP),这样调用方不必自己解析 DER;没有也不阻塞。
  4. 从 uvcpp_tcp_client / uvcpp_http_client 转发查询接口(例如 peer_cert_chain_der()、peer_verify_result()),保证连接建立后、关闭前可读。
  5. HTTP/2 与 HTTP/1.1 都应可用;HTTP/3 如果 QUIC 侧取链成本高,可以明确返回不支持,不要静默空串。

验收

用本地自签名 / 过期 / 域名不匹配的 HTTPS 服务端:

  • 三者返回不同的 peer_verify_result(),而不是统一的 bool;
  • 能拿到大于 1 张的证书链;
  • h1 与 h2 路径行为一致。

建议进入 1.8.2(至少 h1/h2 的链 + verify code)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions