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

最近公司的域名准备过期了,防止用户访问的时候出现异常,所以最近我们准备替换相关网站证书为最新的。
(一般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脚本检查域名证书内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Shell脚本实现生成SSL自签署证书

    启用 apache 的 mod_ssl 之后需要有证书才能正常运作.写了个脚本来操作.首先要确定机器上已经有 openssl . 复制代码 代码如下: #!/bin/sh # # ssl 证书输出的根目录. sslOutputRoot="/etc/apache_ssl" if [ $# -eq 1 ]; then  sslOutputRoot=$1 fi if [ ! -d ${sslOutputRoot} ]; then  mkdir -p ${sslOutputRoot} fi c

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

    最近公司的域名准备过期了,防止用户访问的时候出现异常,所以最近我们准备替换相关网站证书为最新的.(一般HTTPS证书有效期为1年,证书过期后或者该证书不是该域名的有效证书时,在浏览器中访问会出现如下提示,这时候如果还是要访问只能通过点击"高级",忽略风险继续访问) 我们这里有些域名是直接解析到自己的业务机器上的,并没有经过运维管理的nginx再来做转发,所以针对这部分域名,就需要的单独到业务机器上下载最新的域名证书,然后替换了一下证书,并重启一下nginx (nginx -s relo

  • shell脚本中case条件控制语句的一个bug分析

    在shell脚本中,发现case语句的一个问题.就是指定小写字母[a-z]和大写字母[A-Z]的这种方法不管用了. 出现如下情况: 复制代码 代码如下: [root@station1 ~]# cat case.sh#!/bin/bashwhile :doecho -n "input a letter: "read varcase "$var" in  [a-z]) echo "Lowercase letter";;  [A-Z]) echo &q

  • shell脚本实现数据库表增量同步的流程

    需求: 每天定时将 源数据库 study_plan 库的 zxxt_class 表 增量同步到 目标数据库 axt_statistics 库的 zxxt_class 表中 前提条件: 两个库中的 zxxt_class 表结构一致 询问开发根据哪个字段作为增量参考,这里开发给的是id字段 流程: 获取 axt_statistics 库的 zxxt_class 表中id字段的最大id值 通过这个id值备份study_plan 库的 zxxt_class 表中大于此id的数据 将数据导入 脚本: #!

  • Shell脚本检查IP格式及mysql操作实例

    还是cronjob的一部分,就是在Rails的定时任务里,后台交互运行 CheckIPAddress() { echo $1 |grep "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" > /dev/null if [ $? = 1 ]; then return 1 else a=`echo $1 | awk -F. '{print $1}'` b=`echo $1 | awk -F. '{print $2}'

  • Shell脚本实现apache日志中的状态码分析

    一.首先将apache日志按天切割 复制代码 代码如下: vi /etc/httpd/conf/httpd.conf         ErrorLog "|rotatelogs /var/log/httpd/%Y%m%derror_log 86400 480"        CustomLog "|rotatelogs /var/log/httpd/%Y%m%daccess_log 86400 480" combined 二.重启apache服务 复制代码 代码如下

  • Shell脚本自动备份MySQL到FTP并定期清理过期备份

    以前公司用的一个网上找的MySQL自动备份到FTP的Shell脚本,一直用着不错.但是问题就是随着备份文件的越来越多,不得不定期清理FTP上的老备份文件,十分的不便. 实际上MySQL备份无需保留太长时间的,如果能有自动清理旧的备份文件的功能就好了.不过网上找了一下,虽然也有这方面的脚本,不过可能不太符合我的需求吧.于是只能自己手动改下以前的那个Shell脚本来实现咯. 首先我们要确定保留备份的时间,我觉得一个月的备份保留就足够了.因为基本不会出现1个月后要恢复1个月之前备份的情况.(如果有请自

  • shell脚本实现公司项目部署交付环境预检查的思路

    大型项目环境预检查脚本,根据自己实际情况修改脚本中变量,给大家一个思路,转载请注明出处~ #!/usr/bin/env bash root=$( cd $(dirname $0) pwd ) source "$root"/dragonrc CPU=$(echo "`cat /proc/cpuinfo | grep "physical id" | uniq | wc -l`H") MEM=$(echo "$((`cat /proc/mem

  • 写出健壮Bash Shell脚本的一些技巧总结

    许多人用Shell脚本完成一些简单任务,而且变成了他们生命的一部分.不幸的是,shell脚本在运行异常时会受到非常大的影响.在写脚本时将这类问题最小化是十分必要的.本文中我将介绍一些让bash脚本变得健壮的技术. 使用set -u 你因为没有对变量初始化而使脚本崩溃过多少次?对于我来说,很多次. 复制代码 代码如下: chroot=$1 ... rm -rf $chroot/usr/share/doc 如果上面的代码你没有给参数就运行,你不会仅仅删除掉chroot中的文档,而是将系统的所有文档都

  • 使用shell脚本每天对MySQL多个数据库自动备份的讲解

    Linux下使用shell脚本,结合crontab,定时备份MySQL下多个数据库,每次备份的数据存放于以日期命名的文件夹中,同时删除超过设定的备份保留时间的数据. 以下例子设定备份保留时间为1个月(-1month),可根据需求修改 #! /bin/bash # MySQL用户 user="root" # MySQL密码 userPWD="123456" # 需要定时备份的数据表列表 dbNames=(db_test1 db_test2 db_test3 db_te

  • Jar包一键重启的Shell脚本及新服务器部署的一些经验分享

    前言 最近公司为客户重新部署了一套新环境,由我来完成了基础环境的配置,配置过程中总结了一些经验,分享给各位园友 使用 curl 命令检查网络 拿到新服务器后,首先检查服务器网络是否通畅.我们常用的 ping 命令使用的是 ICMP 协议,大部分服务器都设置了域名出入站规则,即使某些地址可以 ping 通,也存在服务器无法访问的情况.这时可以使用 curl host:port 命令来测试该服务器能否正常发送 http 请求到外部服务器 安装 JDK 新服务器一般没有 JDK ,可以使用 java

随机推荐