Если у меня есть фактический файл и оболочка Bash в Mac или Linux, как я могу запросить файл сертификата, когда он истечет? Не веб-сайт, а собственно сам файл сертификата, предполагающий, что у меня есть файлы csr, key, pem и chain.
Как определить дату истечения срока действия сертификата SSL из сертификата, закодированного в PEM?
Ответ 1
С openssl
:
openssl x509 -enddate -noout -in file.pem
Вывод находится в форме:
notAfter=Nov 3 22:23:50 2014 GMT
Также см. ответ MikeW, как легко проверить, истек ли срок действия сертификата или нет, или будет ли он в течение определенного периода времени, без необходимости синтаксического анализа даты выше.
Ответ 2
Если вы просто хотите узнать, истек ли срок действия сертификата (или будет делать это в течение следующих 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
.
(Конечно, предполагается, что время/дата установлены правильно)
Ответ 3
Здесь моя командная строка 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
Ответ 4
Для MAC OSX (El Capitan) Эта модификация примера Николаса работала для меня.
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
.