ssl新闻资讯

文档中心

3绉嶆柟娉曞揩閫熸煡鐪婰inux鏈嶅姟鍣⊿SL璇佷功鏈夋晥鏈燂紙闄勮缁嗗懡浠わ級

时间 : 2025-09-27 15:39:26浏览量 : 3

23绉嶆柟娉曞揩閫熸煡鐪婰inux鏈嶅姟鍣⊿SL璇佷功鏈夋晥鏈燂紙闄勮缁嗗懡浠わ級

作为网络安全从业人员,我经常需要检查服务器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如何查看证书过期时间