一、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_cache 与 ssl_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 日常运维中最实用的两个方向。