답변:
인증서가 만료되었는지 또는 다음 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 초 동안 종료되지 않으면 종료 코드 (0)를 반환합니다. 인증서가 만료되었거나 이미 완료되었거나 유효하지 않거나 존재하지 않는 파일과 같은 다른 오류가있는 경우 반환 코드는 1
입니다.
(물론 시간 / 날짜가 올바르게 설정되어 있다고 가정합니다)
-noout
추가 논리없이 단일 명령을 사용하여 유용한 메시지를 보려면 옵션을 생략 하십시오. 예를 들어, openssl x509 -checkend 0 -in file.pem
인증서가 0 초 내에 만료되는지 여부를 나타내는 "인증서 만료"또는 "인증서 만료되지 않음"출력을 제공합니다.
다음은 가장 최근에 먼저 만료되는 여러 인증서를 만료 순서대로 나열하는 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
0 7 * * 1 /path/to/cert.sh | mail -s "certbot" my@email.com
다음은 DNS 라운드 로빈을 사용한다고 가정하고 모든 서버를 확인하는 bash 기능입니다. 여기에는 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
expiry_date
값에서 시간대 이름을 제거해야합니다. 이를 cut
위해 파이프 끝에 추가 를 추가하십시오 .| cut -d ' ' -f 1-4
MAC OSX (El Capitan)의 경우이 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
플래그를 좋아하지 않았습니다 .
.cer
Apple Dev 사이트에서 방금 만들고 다운로드 한 인증서를 가지고 있다면 어떻게해야 합니까?
허용 된 답변과 동일하지만 파일 위치 를 찾을 수없는 경우를 대비 하여 .crt
파일뿐만 아니라 .pem
파일 에서도 작동 .pem
합니다.
openssl x509 -enddate -noout -in e71c8ea7fa97ad6c.crt
결과:
notAfter=Mar 29 06:15:00 2020 GMT
-startdate
와-enddate
에 내장 된 옵션x509
유틸리티를. 그들은 당신을 저장합니다grep
.