如果我在Mac或Linux中有实际的文件和Bash shell,我该如何查询证书文件何时会过期?不是一个网站,而是实际上证书文件本身,假设我有csr,key,pem和chain文件。如何从PEM编码证书确定SSL证书过期日期?
回答
随着openssl
:
openssl x509 -enddate -noout -in file.pem
输出为形式:
notAfter=Nov 3 22:23:50 2014 GMT
另见MikeW's answer对于如何轻松地检查证书是否过期与否,或者是否会在一一定的时间段,而不必解析上述日期。
如果你只是想知道证书是否已过期(或将在未来的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
这节省了做日期/你可以自己比较时间。
openssl
将返回0
(零)如果证书尚未过期,并在接下来的86400秒不会做这样的退出代码。如果证书已过期或已经这样做 - 或者其他错误(如无效/不存在的文件),则返回码为1
。
(当然,它假定时间/日期设置是否正确)
要确定证书是否当前过期,请使用零秒持续时间。省略“-noout”选项可使用单个命令查看有用的消息,而无需额外的逻辑。例如,'openssl x509 -checkend 0 -in file.pem'将输出“证书将过期”或“证书不会过期”,指示证书是否将在零秒内到期。 –
这里是我的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
示例输出:
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
对于MAC OSX(埃尔卡皮坦)Nicholas的例子的该变形例为我工作。
for pem in /path/to/certs/*.pem; do
printf '%s: %s\n' \
"$(date -jf "%b %e %H:%M:%S %Y %Z" "$(openssl x509 -enddate -noout -in "$pem"|cut -d= -f 2)" +"%Y-%m-%d")" \
"$pem";
done | sort
样本输出:
2014-12-19: /path/to/certs/MDM_Certificate.pem
2015-11-13: /path/to/certs/MDM_AirWatch_Certificate.pem
MacOS的不喜欢我的系统上--date=
或--iso-8601
标志。
如果您没有制作.pem文件,但是您刚刚制作并从Apple Dev站点下载了'.cer'证书,您将如何做到这一点? –
这是一个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
}
输出例如:
$ 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
- 1. AFNetworking SSL Pinning过期证书
- 2. 检查SSL证书到期日期
- 3. 检查SSL证书的到期日期
- 4. SSL证书编译成pem文件
- 5. APN SSL证书有效期
- 6. SSL证书没有日期错误
- 7. 以编程方式确定红宝石中的SSL证书到期日期
- 8. 获取openssl证书过期日期
- 9. 确定哪个证书过期
- 10. 证书已过期?
- 11. WWDR证书过期
- 12. java - 忽略过期的ssl证书
- 13. 'Peer Not Authenticated',parse.com SSL证书过期
- 14. Apache JMeter接受过期的SSL证书
- 15. 如何通过C#代码获取证书的到期日期?
- 16. 如何使用aiohttp检查SSL证书到期日期?
- 17. APNS证书.pem
- 18. ssl客户端如何接受过期的SSL证书
- 19. SSL证书验证编程
- 20. SSL连接使用Python的.pem证书
- 21. 证书到期
- 22. 如何从连接的SSL会话中获取base64编码证书(PEM)
- 23. 如何跟踪客户的托管/域名/ SSL证书过期日期?
- 24. 将PEM证书或Java证书转换为ASN1证书
- 25. 如何从PHP中的SSL证书文件获取到期日期
- 26. 撤销过期证书
- 27. 证书到期日期检查
- 28. 代码签名证书过期问题
- 29. 如何将SSL证书中的长日期转换为短日期| Unix KSH
- 30. 检测到期的SSL证书
Stack Overflow是用于编程和发展问题的站点。这个问题似乎是无关紧要的,因为它不是关于编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[Unix&Linux堆栈交换](http://unix.stackexchange.com/)会是一个更好的地方。另请参阅[我在哪里发布有关Dev Ops的问题?](http://meta.stackexchange.com/q/134306)。 – jww