一、HTTPS 配好之后为什么还要继续运维

很多人做完 HTTPS 配置后,就以为工作已经结束。
但原笔记在后半部分又专门写了“优化”和“监控”,说明 HTTPS 真正上线后还需要持续关注两件事:

  • 性能与协议参数是否合理
  • 证书是否快过期

如果前者配置不当,会影响访问效率;
如果后者没人盯,证书一旦过期,站点就会直接出现严重访问异常。

二、常见 SSL 参数优化都在调什么

原笔记给出了一份典型配置示例:

server {
  listen 443;
  keepalive_timeout 70;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5;
  ssl_certificate /usr/local/nginx/conf/cert.pem;
  ssl_certificate_key /usr/local/nginx/conf/cert.key;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;
}

虽然这是一段示例配置,但它已经覆盖了 HTTPS 常见的几个优化方向。

三、这些 SSL 参数分别代表什么

结合原笔记的说明,可以把重点参数理解成:

3.1 keepalive_timeout

keepalive_timeout 70;

作用是:

  • 控制连接保持时间
  • 在一定时间内没有活动的连接会被关闭

它会影响长连接体验和服务器资源占用。

3.2 ssl_protocols

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

作用是:

  • 指定允许使用哪些 TLS/SSL 协议版本

这直接关系到兼容性和安全性。

3.3 ssl_ciphers

ssl_ciphers ...

作用是:

  • 指定允许使用的加密套件

本质上是在控制:

  • 哪些加密算法可被接受
  • 哪些已知较弱算法要被排除

3.4 ssl_session_cachessl_session_timeout

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

它们主要用于:

  • 缓存 SSL 会话
  • 减少重复握手开销
  • 提升 HTTPS 访问性能

对访问量较大的站点来说,这一类配置会非常重要。

四、怎么快速查看线上网站证书什么时候过期

原笔记先给了一个最直接的方法:

curl -vL https://www.baidu.com |& grep 'expire date'

输出里可以看到类似:

expire date: 8月 06 01:51:05 2024 GMT

这说明:

  • curl -v 在建立 HTTPS 连接时会打印证书信息
  • 通过 grep 'expire date' 就能直接看到到期时间

原笔记还特地解释了:

|&

表示把标准输出和标准错误一起传给后面的命令。
因为 curl -v 的证书信息很多时候正是输出在错误流里。

五、怎么查看本地证书文件的有效期

如果不是查线上网站,而是查本地证书文件,原笔记使用的是:

openssl x509 -in /etc/nginx/ssl_keys/www.harbor-local.cn.pem -noout -dates

输出里会看到:

notBefore=...
notAfter=...

这里两个字段分别表示:

  • notBefore:证书生效时间
  • notAfter:证书截止时间

这对排查“证书到底有没有过期”非常直接。

六、如何写一个证书到期检查脚本

原笔记给出了一份非常实用的 Shell 脚本:

#!/bin/bash
#author: zq
#version: v1.0

LANG=en_US.utf8

if [ -z "$1" ]; then
  echo "使用格式: sh/bash $0 <website_url>"
  exit 1
fi

url=$1

expire_date_ori=`curl -vL $url |& grep 'expire date' | awk -F 'date:|GMT' '{print $2}'`
expire_date_opt=`date -d "$expire_date_ori" +%s`

date_now_second=`date +%s`
expire_days=`echo "($expire_date_opt - $date_now_second)/(60*60*24)"|bc`

echo "网站$url证书过期倒计时:还有 $expire_days 天"
echo "网站过期日期是:`date -d \"$expire_date_ori\" +%F`"

这段脚本的思路其实很清楚:

1、用 curl -vL 取出证书过期日期
2、把日期转成时间戳
3、和当前时间戳相减
4、算出还剩多少天

这已经足够做一个基础巡检脚本了。

七、这个脚本适合怎么用

原笔记演示了两种执行结果。

正常输入 URL:

bash check_ssl.sh https://www.baidu.com

就会输出:

  • 剩余天数
  • 到期日期

而如果不传参数,则会提示正确用法:

使用格式: sh/bash check_ssl.sh <website_url>

这说明它已经具备了最基本的脚本友好性,适合:

  • 手工巡检
  • 结合定时任务运行
  • 再往上接入告警系统

八、小结

HTTPS 真正进入运维阶段后,重点通常不再是“怎么把证书配上”,而是:

  • 参数是否合理
  • 会话缓存是否开启
  • 证书何时过期
  • 是否有自动或半自动的检查机制

原笔记这一节给出的优化配置和证书监控脚本,正好覆盖了 HTTPS 日常运维中最实用的两个方向。