编程技术分享平台

网站首页 > 技术教程 正文

推荐一款自动扫描nginx下ssl证书过期时间工具

xnh888 2024-10-06 05:16:42 技术教程 27 ℃ 0 评论


今天老码给大家推荐一款nginx下可以自动扫描ssl配置文件输出ssl证书有效时间的小工具。工具使用方法很简单

./nginxSSLParse \ 
   --folder=你的nginx配置hosts目录  \
   --suffix=文件后缀默认conf \ 
   --day=检测过期范围,默认10天
NAME:
   nginxSslParse - 扫描检查ssl证书过期时间

USAGE:
   nginxSslParse [global options] command [command options] [arguments...]

COMMANDS:
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --folder value
   --suffix value  (default: "conf")
   --day value     (default: 30)
   --help          show help

使用参考截图

工具原理简介

读取三个参数(站点hosts目录、文件后缀、过期范围时间单位天数)

扫描指定目录下的所有host文件

allConfFiles, err := filepath.Glob(path.Join(folder, "*."+suffix))
	if err != nil {
		return err
	}
	//读取文件内容找到对应 ssl_certificate 指令文件
	for _, confFile := range allConfFiles {
 			//如下
  }
}

解析host文件指令ssl_certificate并获取配置

config := p.Parse()
directives := config.FindDirectives("ssl_certificate")
if len(directives) == 0 {
  continue
}

sslFiles := directives[0].GetParameters()
if len(sslFiles) == 0 {
  continue
}

if tmpFile, err := os.Stat(sslFiles[0]); err != nil || tmpFile.Size() == 0 {
  continue
}

解析证书拿到有效开始时间、结束时间,判断与给定的有效天数对比过期并红色输出提醒
func parserSslFile(cliContext *cli.Context, sslFile string) {
	sslRaw, err := os.ReadFile(sslFile)
	if err != nil {
		log.Printf("readSSLFile %s failed %v\n", sslFile, err)
		return
	}

	certDERBlock, _ := pem.Decode(sslRaw)
	if certDERBlock == nil {
		log.Print(err)
		return
	}

	x509Cert, err := x509.ParseCertificate(certDERBlock.Bytes)
	if err != nil {
		log.Print(err)
		return
	}

	if x509Cert.NotAfter.Before(time.Now().Add(time.Hour * 24 * time.Duration(cliContext.Int("day")))) {
		log.Printf("foundSSLFile %s StartAt=%s,EndAt=\u001B[0;31m%s\033[0m \n",
			sslFile,
			x509Cert.NotBefore.Format("2006-01-02 15:04"),
			x509Cert.NotAfter.Format("2006-01-02 15:04"),
		)
	} else {
		log.Printf("foundSSLFile %s StartAt=%s, EndAt=%s\n",
			sslFile,
			x509Cert.NotBefore.Format("2006-01-02 15:04"),
			x509Cert.NotAfter.Format("2006-01-02 15:04"),
		)
	}
}

工具使用场景多见于使用免费一年证书域名,用于查看哪些域名证书即将过期。

工具已经在github开源

https://github.com/ixqbar/nginxSSLParse

欢迎各位收藏、关注、点赞!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表