Https(SSL)证书
很多网友在访问各网站的时候,不知道你有没有注意几乎所有网站网址的开头都是 https:// 打头的,而不是 http:// 打头。为什么呢?因为 https 协议对比 http 协议而言安全性更有保证。防止你访问过程中产生的敏感信息被第三方人或组织非法获取到,并作他用。
一、证书简介
自签发证书和权威证书
当然如果一个网站需要提供 https 访问,那么需要 SSL 证书
,这个证书有两种途经获取:
1. 我们自签发;
2. 购买权威证书。
这两个有什么区别呢?
前者不被浏览器承认,因为这个证书是自签发的,认为是非法的。谁知道你有没有动过什么手脚呢,对吧。
SSL免费证书签发
现在免费版本的ssl证书,签发狠方便,(阿里云,腾讯云等等很多),免费版一般有效期是1年,所以问题就来了,ssl何时到期,需要监控起来,最好能提前告知我们,千万别影响业务。。。
nginx https 301跳转配置
server {
listen 80;
listen 443 ssl;
#此处应该配置你的域名:
server_name 1234.dgstack.cn;
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
ssl_certificate /www/ssl/1234.dgstack.cn.pem;
ssl_certificate_key /www/ssl/1234.dgstack.cn.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
charset utf-8;
#此处配置你的访问日志,请手动创建该目录:
access_log /var/log/nginx/dgstack/access.log;
location / {
try_files /_not_exists_ @backend;
}
# 这里为具体的服务代理配置
location @backend {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
#此处配置 MinDoc 程序的地址和端口号
proxy_pass http://127.0.0.1:1111;
}
}
监控SSL证书过期时间
市面监控很多例如:zabbix 或者 cacti 或者 open-falcon 等等,如何选择呢?
所谓监控好加,但是如何获取 SSL 证书的过期时间
呢,这才是重点。
二、监控部署
需要两个文件,一个用于存储域名和端口信息,另一个是具体检测 SSL 证书过期时间的执行脚本。
注意:这两个文件是在一个目录下。
domain_ssl.info「存储域名信息」
[root@bogon scripts]# cat domain_ssl.info
www.dgstack.cn:443
www.baidu.com:443
check_domain_time.sh「SSL 证书过期检测脚本」
[root@bogon scripts]# vim check_https.sh
#!/bin/bash
################ Version Info ##################
# Create Date: 2019-09-18
# Author: Qiuyuetao
# Mail: 598759292@qq.com
# Version: 1.0
# Attention: 通过域名获取证书的过期时间
################################################
# V1.0.0 www.dgstack.cn
# 1.通过域名获取证书的过期时间
################################################
# 加载环境变量
. /etc/profile
. ~/.bash_profile
. /etc/bashrc
# 脚本所在目录即脚本名称
script_dir=$( cd "$( dirname "$0" )" && pwd )
script_name=$(basename ${0})
readFile="${script_dir}/domain_ssl.info"
grep -v '^#' ${readFile} | while read line;do # 读取存储了需要监测的域名的文件
# echo "${line}"
get_domain=$(echo "${line}" | awk -F ':' '{print $1}')
get_port=$(echo "${line}" | awk -F ':' '{print $2}')
# echo ${get_domain}
# echo "${get_port}"
# echo "======"
# 使用openssl获取域名的证书情况,然后获取其中的到期时间
END_TIME=$(echo | openssl s_client -servername ${get_domain} -connect ${get_domain}:${get_port} 2>/dev/null | openssl x509 -noout -dates |grep 'After'| awk -F '=' '{print $2}'| awk -F ' +' '{print $1,$2,$4 }' )
END_TIME1=$(date +%s -d "$END_TIME") # 将日期转化为时间戳
NOW_TIME=$(date +%s -d "$(date "+%Y-%m-%d %H:%M:%S")") # 将当前的日期也转化为时间戳
RST=$(($(($END_TIME1 - $NOW_TIME))/(60*60*24))) # 到期时间减去目前时间再转化为天数
echo "证书有效天数剩余:${RST}"
if [ $RST -lt 30 ];then
echo "$get_domain https 证书有效期少于30天,存在风险"
else
echo "$get_domain https 证书有效期在30天以上,放心使用!"
fi
done
执行结果
三、自动检查异常报警微信推送
上面已经获取到了内容,接下来就加入Cron,然后在推送(微信、钉钉、邮件、短信)给管理者即可,选择一种或多种即可,我这边选择用微信进行推送消息。
微信报警配置传送门
到此结束,更多精彩请点击:监控体系文章
- QQ精品交流群
-
- 微信公众号
-