使用以下代码检查SSL证书是否到期:
cat localdomains | xargs -L 1 bash -c 'openssl s_client -connect $0:443 -servername $0 2> /dev/null | openssl x509 -noout -enddate | cut -d = -f 2 | xargs -I {} echo {} $0'
当我遇到没有返回证书的域时,我试图围绕如何将输出更改为N / A,而不是尝试评估“cut -d = -f 2”然后xargs -I
答案 0 :(得分:2)
如果您在变量中捕获命令的输出,则可以对其进行验证。假设这不是一个班轮:
#!/bin/bash
while read domain; do
expiry=$(openssl s_client -connect ${domain}:443 -servername ${domain} 2>/dev/null </dev/null | \
openssl x509 -noout -enddate 2>&1 | cut -d = -f 2)
# validate output with date
if date -d "${expiry}" > /dev/null 2>/dev/null ; then
echo ${expiry} ${domain}
else
echo "N/A" ${domain}
fi
done
请注意以下几点:
openssl s_client
的标准输入以获取提示(see here for technical details)openssl x509
的stderr重定向到stdout,以便对其进行验证。grep
或sed
来验证输出。我发现date
很方便(如果你想用它来重新格式化日期,那就太方便了。)我通过将其放入文件check_cert_expiry.sh
:
$ cat localdomains
stackoverflow.com
example.example
google.com
$ cat localdomains | ./check_cert_expiry.sh
Aug 14 12:00:00 2019 GMT stackoverflow.com
N/A example.example
Feb 21 09:37:00 2018 GMT google.com
干杯!