shell脚本检查域名证书是否过期的流程分析

 更新时间:2022年02月07日 08:40:34   作者:CurdBoys  
由于域名即将过期,所以最近打算替换相关网站证书为最新的,主要的流程就是读取文件中的域名,然后进行https访问获取到证书过期的时间,如果域名连接不上,则会直接跳过,具体详细过程跟随小编一起通过本文学习下吧

最近公司的域名准备过期了,防止用户访问的时候出现异常,所以最近我们准备替换相关网站证书为最新的。
(一般HTTPS证书有效期为1年,证书过期后或者该证书不是该域名的有效证书时,在浏览器中访问会出现如下提示,这时候如果还是要访问只能通过点击"高级",忽略风险继续访问)

我们这里有些域名是直接解析到自己的业务机器上的,并没有经过运维管理的nginx再来做转发,所以针对这部分域名,就需要的单独到业务机器上下载最新的域名证书,然后替换了一下证书,并重启一下nginx (nginx -s reload) 。

这里替换证书的时候,我遇到了一个坑,就是之前有些域名并不支持https的,然后我就打算换成支持https。结果按照原来的方式配置了https,访问的时候报不安全,提示使用了旧版tsl1.0或tsl1.1的协议,我确保了该域名的协议方式已经修改了,但是浏览器访问的时候,还是提示不安全,网上找了一段时间,才知道要nginx所有的域名配置都修改了,才会生效的,不然nginx 有可能取某个 域名配置的ssl 配置来连接ssl,但是最新的域名下的ssl配置不生效。
按F12打开开发者模式,切到 “Security” tab下页面可以看到不安全的原因,如果是使用了旧版tsl1.0或tsl1.1的协议,则在“Connection”中显示使用了TSL1.0或者TSL1.1的协议。下图的例子是表示无法信任服务器,因为未提供有效的证书。

理论上所有域名都统一由运维部门来管理,直接解析到运维的nginx 再转发到自己的业务机器才是比较好的方案,不然会导致域名不好管理。但是很多历史域名还没时间去修改,就只能手动替换。

这个域名数量会有点多,而且也不知道还有哪些域名还没替换的,因此计划用shell脚本去检查,并且可以将该shell脚本设置为定时任务,每个月或每天定时检查一下,如果有域名要过期了,则告警出来。在网上找了一下相关资料,再根据自己的需求,改造了一版的shell脚本如下:

#!/bin/bash
# 检测https证书有效
echo '开始检查 https证书有效期 '

# 先写域名内容到文件中,再读取文件检查证书是否过期了
# 先清空文件
echo '' > /tmp/https_list.txt 

# 这里替换为自己的检查的域名即可
echo 'www.baidu.com' >> /tmp/https_list.txt
echo 'www.bing.com' >> /tmp/https_list.txt
echo 'www.google.com' >> /tmp/https_list.txt

source /etc/profile

# 定义错误的域名
errorDominStr=""

while read line; do
    echo "====================================================================================="
    
    echo "当前检测的域名:" $line
    end_time=$(echo | timeout 1 openssl s_client -servername $line -connect $line:443 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | awk -F '=' '{print $2}' )
    ([ $? -ne 0 ] || [[ $end_time == '' ]]) && echo '该域名链接不上,跳到下一个域名' && continue
    
    end_times=`date -d "$end_time" +%s `
    current_times=`date -d "$(date -u '+%b %d %T %Y GMT') " +%s `
    
    let left_time=$end_times-$current_times
    days=`expr $left_time / 86400`
    echo "剩余天数: " $days
    
    [ $days -lt 60 ] && echo "https 证书有效期少于60天,存在风险"  && errorDominStr="$errorDominStr \n $line"
    
done < /tmp/https_list.txt

echo -e "准备过期的域名为: \n  $errorDominStr"

if [ "$errorDominStr" = "" ]  
then  
  echo "不包含准备过期的域名"  
else    
  echo "包含准备过期的域名" && exit 10  
fi   
echo "Good bye!"
exit 0

主要的流程就是读取文件中的域名,然后进行https访问获取到证书过期的时间,如果域名连接不上,则会直接跳过,如果该域名证书过期时间小于 60 天,则汇总起来,最后判断是否包含准备过期的域名,如果包含则异常退出exit 10

运行后的结果如下:

参考资料:

https://blog.51cto.com/lee90/2410670 shell脚本检测https证书有效期
https://python.01314.cn/201812519.html 使用python检查SSL证书到期情况

到此这篇关于shell脚本检查域名证书是否过期的流程分析的文章就介绍到这了,更多相关shell脚本检查域名证书内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Shell编程 Bash引号的那点事

    Shell编程 Bash引号的那点事

    促使我想写这个系列的文章,是因为看到总有人提到相同的问题,犯相同的错误,曾经我也是这么过来的,不忍心看到后面还有人经常这么曲折的过来
    2015-01-01
  • Shell命令之数组表示语法学习

    Shell命令之数组表示语法学习

    这篇文章主要为大家介绍了Shell命令之数组表示语法学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • linux定时任务出现command not found解决办法

    linux定时任务出现command not found解决办法

    这篇文章主要介绍了 linux定时任务出现command not found解决办法的相关资料,需要的朋友可以参考下
    2017-05-05
  • 深入了解Linux的文件权限

    深入了解Linux的文件权限

    Shell是操作系统外壳程序的统称,Windos中的图形化界面、Linux中的命令行外壳都是外壳程序。CentOS中的外壳程序被称为bash。本文主要是和大家聊聊Linux中的文件权限,感兴趣的可以了解一下
    2022-10-10
  • Linux运维常用命令

    Linux运维常用命令

    这篇文章主要介绍了Linux在日常运维过程中需要经常用到的命令,非常的全面,有需要的小伙伴可以参考下
    2016-12-12
  • shell 计算器的实现示例

    shell 计算器的实现示例

    在使用Linux时,我们有时会需要做一些计算,那么我们就可能需要用到计算器,本文主要介绍了shell 计算器的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • shell简单处理mysql查询结果的方法

    shell简单处理mysql查询结果的方法

    今天小编就为大家分享一篇shell简单处理mysql查询结果的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • linux 网卡配置详解及实例

    linux 网卡配置详解及实例

    这篇文章主要介绍了linux 网卡配置详解及实例的相关资料,需要的朋友可以参考下
    2017-05-05
  • Ubuntu中的sudo和su命令介绍

    Ubuntu中的sudo和su命令介绍

    这篇文章介绍了Ubuntu中的sudo和su命令,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • shell脚本实现输入密码显示星号

    shell脚本实现输入密码显示星号

    本文给大家分享使用shell脚本实现输入密码显示星号的脚本写法,在文章末尾给大家补充了shell输入密码时关闭屏幕回显的实现方法,需要的朋友参考下吧
    2017-01-01

最新评论