nginx Command

openssl 检查 HTTPS 证书命令

openssl s_client 检查线上 HTTPS 证书的常用命令,openssl s_client -connect example.com:443 -servername 触发 SNI 拿到真实证书,用 openssl x509 -noout -dates -issuer -subject 提取有效期与颁发者,-showcerts 查看完整证书链。

检查公网 HTTPS 证书时一定带 -servername 触发 SNI,否则多站点 Nginx 可能返回默认证书。

适用环境Linux / Nginx / 反向代理
风险等级
最后验证2026-06-30
建议权限普通用户

Scenario

什么时候用这组命令

这组命令适合在处理“openssl 检查 HTTPS 证书命令”时作为第一轮检查模板。使用时先替换占位符,再在目标机器或目标 namespace 中执行,避免在错误环境里得到误导结论。

Input

你需要先准备什么

  • 确认请求是否真正到达当前 Nginx,而不是 CDN、负载均衡或另一台机器。
  • 保留一次失败请求的时间、域名、路径、状态码和客户端 IP,方便和 access/error log 对齐。
  • 修改配置前先导出 nginx -T 的最终合并配置,避免只看了未生效的片段。

Risk Notes

执行风险

  • 不要在生产环境直接 restart Nginx,优先 nginx -t 后 reload,restart 会中断正在处理的连接。
  • 不要为了临时修复把 body size、CORS 或 TLS 校验无上限放开,应设置合理的业务上限并记录调整原因。
  • 不要忽略 error.log 中反复出现的 upstream 超时或 SSL 错误,这些往往是更大问题的早期信号。

Commands

命令详解

命令 1: 执行 echo

用于检查证书有效期、链路加密和协议版本。重点看 notAfter 日期和 Verify return code。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 1: 执行 echo
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates -issuer -subject

命令 2: 执行 openssl

用于检查证书有效期、链路加密和协议版本。重点看 notAfter 日期和 Verify return code。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 2: 执行 openssl
openssl s_client -connect example.com:443 -servername example.com -showcerts

命令 3: 发起 HTTP/网络探测

用于从指定位置模拟真实请求。加 -v 可以看到 DNS、TCP、TLS、HTTP 头和代理连接过程,是定位链路阶段的关键证据。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 3: 发起 HTTP/网络探测
curl -vI https://example.com

命令 4: 执行 openssl

用于检查证书有效期、链路加密和协议版本。重点看 notAfter 日期和 Verify return code。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 4: 执行 openssl
openssl x509 -in fullchain.pem -noout -text | less

Workflow

建议执行顺序

按顺序执行,不要跳过确认类命令

先用只读命令确认状态,再执行会改变状态的命令。检查公网 HTTPS 证书时一定带 -servername 触发 SNI,否则多站点 Nginx 可能返回默认证书。

  • 用 s_client 连接真实域名和 443 端口。
  • 始终指定 -servername,避免 SNI 误判。
  • 提取证书 dates、issuer、subject 判断有效期和域名。
  • 需要查链路时加 -showcerts 查看完整证书链。
  • 修复后从外部网络再次验证线上返回结果。
按顺序执行,不要跳过确认类命令
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates -issuer -subject
openssl s_client -connect example.com:443 -servername example.com -showcerts
curl -vI https://example.com

把命令输出变成结论

命令本身不是结论。每次执行后要回答:目标是否存在、状态是否异常、异常是否能解释用户看到的现象。

  • 记录关键字段,而不是整屏复制
  • 把正常路径和异常路径输出对比
  • 输出为空也要解释:是确实没有,还是权限/过滤条件不对
把命令输出变成结论
openssl s_client -connect example.com:443 -servername example.com -showcerts
curl -vI https://example.com
openssl x509 -in fullchain.pem -noout -text | less

执行前替换占位符并控制影响范围

包含 <service>、<pod>、<namespace>、<pid>、<container> 的命令必须先替换。涉及 reload、restart、KILL、vacuum、prune 的命令要确认影响范围。

  • 优先在测试环境或只读模式验证
  • 生产执行前保留回滚路径
  • 把最终可用命令写入工单或 runbook
执行前替换占位符并控制影响范围
curl -vI https://example.com
openssl x509 -in fullchain.pem -noout -text | less

Verification

怎么判断命令有效

  • 命令已在正确机器、正确用户、正确 namespace 或正确仓库下执行。
  • 输出能支撑明确判断:正常、异常、权限不足、目标不存在或需要下一跳排查。
  • 对有副作用的命令,已确认执行窗口、影响范围和回滚方式。

Prevention

沉淀到日常流程

  • 把 nginx -t 和 reload 后健康检查写入发布流程,每次变更都做一次端到端验证。
  • 为关键站点保留一条外网探测,监控状态码、证书有效期和响应时间,避免等到用户反馈才发现问题。
  • 把上传大小、代理超时、CORS 允许来源写成显式配置,避免散落在多个 location 中导致不一致。
  • 建立 Nginx 配置模板管理机制,所有 server block 使用统一模板,减少手写配置的语法错误和遗漏。

常见问题

为什么 openssl 查到的证书和服务器文件不同?

可能 Nginx 未 reload、访问到了 CDN/负载均衡,或 SNI 没带导致返回默认证书。

Long-tail SEO

你可能正在搜索这些报错

下面这些错误原文、场景词和中英文搜索词,都是排查同类问题时常见的入口。

  • openssl 查看证书
  • openssl 检查 HTTPS 证书
  • openssl x509 证书信息
  • openssl 查看证书过期时间
  • HTTPS 证书查看命令
  • openssl s_client 连接测试