SSL 인증서가 여러 개 있는데 인증서가 만료되면 알림을 받고 싶습니다.
내 생각은 매일 간단한 명령을 실행하는 cronjob을 만드는 것입니다.
openssl
원격 서버의 인증서 정보를 표시하는 데 사용할 수 있는 Linux 명령이 있다는 것을 알고 있습니다 .
openssl s_client -connect www.google.com:443
하지만 이 출력에는 만료 날짜가 표시되지 않습니다. 또한 CTRL이 명령은 + 로 종료 해야 합니다 c.
스크립트에서 원격 인증서의 만료 시간을 확인하고(가급적 하나 사용 openssl
) 이를 "배치 모드"에서 실행하여 사용자 상호 작용 없이 자동으로 실행되도록 하려면 어떻게 해야 합니까?
답변1
이제 명령에 http 요청이 필요합니다(예: ) GET index.php
. 대신 이것을 사용하십시오:
if true | openssl s_client -connect www.google.com:443 2>/dev/null | \
openssl x509 -noout -checkend 0; then
echo "Certificate is not expired"
else
echo "Certificate is expired"
fi
true
: 입력을 제공하지 않고 연결 후 openssl이 종료되도록 eof를 제공합니다.openssl ...
: 귀하의 질문에 있는 명령2>/dev/null
: 오류 출력은 무시됩니다.
openssl x509
: X.509 인증서 데이터 관리를 활성화합니다.- 기본적으로 표준 입력에서 읽습니다.
-noout
:전체 인증서 출력을 억제합니다.-checkend 0
: 인증서가 0초 후에 만료되는지 확인합니다.
답변2
인증서를 제공하지만 디코딩하지는 않습니다. 날짜를 원하면 필요하기 때문에 볼 수 없습니다. 따라서 x509
인증서를 디코딩하려면 OpenSSL 애플리케이션으로 파이프되어야 합니다 .
openssl s_client -connect www.example.com:443 \
-servername www.example.com </dev/null |\
openssl x509 -in /dev/stdin -noout -text
그러면 유효 날짜를 포함하여 표준 출력으로 완전한 디코딩된 인증서가 제공됩니다.
답변3
유통기한 확인하고 싶으시면 이렇게 해주세요블로그 게시물, 한 번의 호출로 이 정보와 기타 관련 정보를 찾는 방법을 찾았습니다.
echo | openssl s_client -servername unix.stackexchange.com -connect unix.stackexchange.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates
출력에는 발급자, 주체(인증서가 발급된 대상), 발급 날짜 및 최종 정보가 포함됩니다.만료일:
issuer= /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
subject= /C=US/ST=NY/L=New York/O=Stack Exchange, Inc./CN=*.stackexchange.com
notBefore=May 21 00:00:00 2016 GMT
notAfter=Aug 14 12:00:00 2019 GMT