文档中心
3绉嶆柟娉曞揩閫熸煡鐪婰inux鏈嶅姟鍣⊿SL璇佷功鏈夋晥鏈燂紙闄勮缁嗗懡浠わ級
时间 : 2025-09-27 15:39:26浏览量 : 3

作为网络安全从业人员,我经常需要检查服务器SSL证书的有效期。一个过期的SSL证书会导致网站无法访问、浏览器安全警告,严重影响业务和用户体验。今天我就用最通俗易懂的方式,教你3种在Linux系统下查看SSL证书有效期的实用方法。
一、为什么需要定期检查SSL证书有效期?
先讲个真实案例:去年某电商平台大促期间,因为运维人员疏忽,主站SSL证书过期未续期,导致用户在支付时全部出现"不安全连接"警告,直接造成当天订单量下降37%,损失惨重。
SSL证书就像网站的"身份证",它有明确的有效期(通常1年)。我们需要在到期前续费更新,否则:
1. 用户访问会看到红色警告页面
2. Chrome等浏览器会直接拦***问
3. API接口调用会失败
4. 影响搜索引擎排名
二、方法1:使用openssl命令(最通用)
这是Linux系统自带的工具,无需安装额外软件。
基本命令:
```bash
echo | openssl s_client -connect 域名:443 2>/dev/null | openssl x509 -noout -dates
```
实际案例:
假设我们要检查baidu.com的证书有效期:
echo | openssl s_client -connect baidu.com:443 2>/dev/null | openssl x509 -noout -dates
输出结果示例:
notBefore=Nov 3 07:12:13 2025 GMT
notAfter=Nov 6 07:12:13 2025 GMT
- notBefore:证书生效时间
- notAfter:证书过期时间
进阶用法:
如果只想看剩余天数:
echo | openssl s_client -connect baidu.com:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2 | xargs -I {} date -d {} +%s | awk '{print ($0-systime())/86400}' | bc
这会直接显示像"89"这样的数字,表示还剩89天过期。
三、方法2:使用curl命令(适合快速检查)
curl也是Linux常用工具,可以用来获取证书信息。
curl --insecure -v https://域名 2>&1 | awk 'BEGIN { cert=0 } /^\* SSL connection/ { cert=1 } /^\* Server certificate:/ { if (cert) print }'
检查github.com的证书:
curl --insecure -v https://github.com 2>&1 | awk 'BEGIN { cert=0 } /^\* SSL connection/ { cert=1 } /^\* Server certificate:/ { if (cert) print }'
* Server certificate:
* start date: May 4 00:00:00 2025 GMT
* expire date: May 8 23:59:59 2025 GMT
* ...
四、方法3:使用nmap脚本(批量检测神器)
如果需要检查大量服务器的证书状态,nmap是最佳选择。
安装nmap脚本库:
```bash
sudo apt install nmap ncat
Debian/Ubuntu
sudo yum install nmap nc
CentOS/RHEL
下载ssl-cert脚本
wget https://svn.nmap.org/nmap/scripts/ssl-cert.nse
sudo mv ssl-cert.nse /usr/share/nmap/scripts/
使用案例1:检查单个服务器
nmap --script ssl-cert -p443 baidu.com
使用案例2:批量扫描网段
nmap --script ssl-cert -p443,8443,9443,10443,11443,12443,13443,14443,15443,16443,17443,18443,19443,20443,21443,22443,23443,24443,25443 example.com/24
PORT STATE SERVICE
443/tcp open https
| ssl-cert: Subject: commonName=*.baidu.com/organizationName=Beijing Baidu Netcom Science Technology Co., Ltd/countryName=CN
| Not valid before:2025-11-03T07:12:13
|_Not valid after :2025-11-06T07:12:13
五、自动化监控方案
对于企业级应用,建议设置自动化监控:
方案1:Zabbix监控模板
创建监控项原型:
openssl s_client connect {HOST.CONN}:{HOST.PORT} xargs I {} date d {} +%s >awk '{print ($0-systime())/86400}' >bc >$HOME/tmp/{HOST.HOST}_{HOST.PORT}.days && cat $HOME/tmp/{HOST.HOST}_{HOST.PORT}.days || echo "0"
方案2:Prometheus + Blackbox Exporter
配置示例:
```yaml
modules:
http_ssl_expiry:
prober http
http:
preferred_ip_protocol ip4 tls_config insecure_verify true targets [example.com]
方案3:Shell脚本+定时任务
创建check_ssl.sh:
!/bin/bash DOMAINS="baidu.com github.com example.com" for domain in $DOMAINS do expiry_date=$(echo|openssl s_client connect $domain443/dev/null|openssl x509 noout enddate|cut d=f2) days_left=$((($(date d "$expiry_date"+%s)(date+%s))/86400)) if [ $days_left lt30 ]; then echo "警告:$domain SSL证书将在$days_left天后过期!" fi done ```
添加到crontab每天执行:
0 * * crontab e echo "0 * root/path/to/check_ssl.sh >>var/log/ssl_check.log" >>etc/crontab ```
六、常见问题解答
Q为什么有时命令返回空结果?
A可能原因:
1.端口不是443(比如8443),需要修改端口号
2.防火墙拦截了连接
3.服务器没有启用HTTPS
Q如何检查非标准端口的SSL?
修改端口参数即可:
```bash echo|openssl s_client connect IP地址84432/dev/null|... ```
Q内网IP地址怎么查?
用-servername参数指定域名:
```bash echo|openssl s_client connect192.168.1.1443 servername internal.example.com... ```
七、最佳实践建议
根据多年安全运维经验建议:
1. 提前30天续期 :不要等到最后几天
2. 设置多重提醒 :邮件+短信+钉钉机器人
3. 统一管理平台 :推荐Certbot或acme.sh自动续期工具
4. 保留备份证书 :防止更新失败导致服务中断
记住这句运维口诀:"证不过期,心不慌;提前检测,保平安"。希望能帮你建立完善的SSL证书监控机制!
TAG:linux查看ssl证书有效期,ssl证书内容怎么看,linux查看ssh密钥,linux查看cer证书,linux证书查询,linux如何查看证书过期时间