用 tls.Dial 连接并读取远程证书需设 InsecureSkipVerifytrue从 PeerCertificates 取 leaf 证书解析域名端口缺省为443用 time.Now().UTC() 比较 NotBefore/NotAfter并校验域名匹配需分类处理连接错误、设超时、避免 panic。怎么用 crypto/tls 连接并读取远程证书Go 没有内置“查证书过期时间”的一键函数得自己连上 TLS 端口、抓回 *x509.Certificate再看 NotBefore 和 NotAfter。别用 HTTP 客户端直接 GET——它默认校验证书有效性失败就 panic 或返回 error你根本拿不到原始证书。实操建议立即学习“go语言免费学习笔记深入”用 tls.Dial 手动建立连接传入空的 tls.Config{InsecureSkipVerify: true}否则握手失败就中断了连接成功后从 conn.ConnectionState().PeerCertificates 取第一个证书通常是 leaf注意有些服务如 CDN可能返回多张证书但有效期要看最上面那张不是 CA 根证书超时必须设tls.Dial 默认不超时遇到防火墙拦截或高延迟域名会卡死如何解析域名端口并支持常见 HTTPS 端口用户输 example.com你不能硬编码连 443输 mail.example.com:8443得正确拆出 host 和 port。Go 的 net.SplitHostPort 在没给端口时会报错得兜底。实操建议立即学习“go语言免费学习笔记深入”先用 strings.Contains(host, :) 判断是否有显式端口有就用 net.SplitHostPort没有就拼 host :443别信任用户输入的 port 字符串用 strconv.Atoi 转后校验是否在 1–65535 范围内常见非标端口如 8443、8080、8009Tomcat AJP over SSL要能识别但不要自动 fallback——明确报错比静默连错端口更安全证书过期判断逻辑和时区陷阱NotAfter 是 UTC 时间而本地 time.Now() 默认是本地时区。如果机器时区设成 CSTUTC8直接比较会导致误判提前 8 小时过期。 文心快码 文心快码Comate是百度推出的一款AI辅助编程工具