GL2*_*014 278 bash ssl openssl certificate
如果我在Mac或Linux中有实际文件和Bash shell,我如何查询cert文件何时到期?假设我有csr,key,pem和chain文件,这不是一个网站,而是实际上是证书文件本身.
tha*_*guy 556
用openssl
:
openssl x509 -enddate -noout -in file.pem
Run Code Online (Sandbox Code Playgroud)
输出在表单上:
notAfter=Nov 3 22:23:50 2014 GMT
Run Code Online (Sandbox Code Playgroud)
另请参阅MikeW的答案,了解如何轻松检查证书是否已过期,或者是否在一定时间内,无需解析上述日期.
Mik*_*keW 146
如果您只想知道证书是否已过期(或将在接下来的N秒内完成),该-checkend <seconds>
选项openssl x509
将告诉您:
if openssl x509 -checkend 86400 -noout -in file.pem
then
echo "Certificate is good for another day!"
else
echo "Certificate has expired or will do so within 24 hours!"
echo "(or is invalid/not found)"
fi
Run Code Online (Sandbox Code Playgroud)
这节省了必须自己进行日期/时间比较.
openssl
0
如果证书尚未过期,将返回退出代码(零),并且在上面的示例中,将不会在接下来的86400秒内返回退出代码.如果证书已经过期或已经过期 - 或者其他错误,如无效/不存在的文件 - 返回代码是1
.
(当然,它假定时间/日期设置正确)
Rah*_*ava 29
命令:
# cat {key_name} | openssl x509 -noout -enddate
Example: # cat tower.cert | openssl x509 -noout -enddate
Run Code Online (Sandbox Code Playgroud)
结果:
notAfter=Dec 7 04:03:32 2023 GMT
Run Code Online (Sandbox Code Playgroud)
Nic*_*kin 18
这是我的bash命令行,按顺序列出多个证书,最近一次到期.
for pem in /etc/ssl/certs/*.pem; do
printf '%s: %s\n' \
"$(date --date="$(openssl x509 -enddate -noout -in "$pem"|cut -d= -f 2)" --iso-8601)" \
"$pem"
done | sort
Run Code Online (Sandbox Code Playgroud)
样本输出:
2015-12-16: /etc/ssl/certs/Staat_der_Nederlanden_Root_CA.pem
2016-03-22: /etc/ssl/certs/CA_Disig.pem
2016-08-14: /etc/ssl/certs/EBG_Elektronik_Sertifika_Hizmet_S.pem
Run Code Online (Sandbox Code Playgroud)
Sri*_*nth 16
与接受的答案相同,但请注意,它甚至适用于.crt
文件而不仅仅是.pem
文件,以防万一您无法找到.pem
文件位置。
openssl x509 -enddate -noout -in e71c8ea7fa97ad6c.crt
Run Code Online (Sandbox Code Playgroud)
结果:
notAfter=Mar 29 06:15:00 2020 GMT
Run Code Online (Sandbox Code Playgroud)
这是一个bash函数,它会检查您的所有服务器,假设您使用的是DNS循环法.请注意,这需要GNU日期,并且不适用于Mac OS
function check_certs () {
if [ -z "$1" ]
then
echo "domain name missing"
exit 1
fi
name="$1"
shift
now_epoch=$( date +%s )
dig +noall +answer $name | while read _ _ _ _ ip;
do
echo -n "$ip:"
expiry_date=$( echo | openssl s_client -showcerts -servername $name -connect $ip:443 2>/dev/null | openssl x509 -inform pem -noout -enddate | cut -d "=" -f 2 )
echo -n " $expiry_date";
expiry_epoch=$( date -d "$expiry_date" +%s )
expiry_days="$(( ($expiry_epoch - $now_epoch) / (3600 * 24) ))"
echo " $expiry_days days"
done
}
Run Code Online (Sandbox Code Playgroud)
输出示例:
$ check_certs stackoverflow.com
151.101.1.69: Aug 14 12:00:00 2019 GMT 603 days
151.101.65.69: Aug 14 12:00:00 2019 GMT 603 days
151.101.129.69: Aug 14 12:00:00 2019 GMT 603 days
151.101.193.69: Aug 14 12:00:00 2019 GMT 603 days
Run Code Online (Sandbox Code Playgroud)
如果域证书将在一段时间后过期(例如 15 天),则一行检查真/假:
openssl x509 -checkend $(( 24*3600*15 )) -noout -in <(openssl s_client -showcerts -connect my.domain.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM)
if [ $? -eq 0 ]; then
echo 'good'
else
echo 'bad'
fi
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
286342 次 |
最近记录: |