SSL 인증서가 유효한지 확인하는 스크립트


14

SSL 인증서가 여러 개 있으며 인증서가 만료되면 알림을 받고 싶습니다.

내 생각은 매일 간단한 명령을 실행하는 cronjob을 만드는 것입니다.

opensslLinux 의 명령을 사용하여 원격 서버의 인증서 정보를 표시 할 수 있다는 것을 알고 있습니다.

openssl s_client -connect www.google.com:443

그러나이 출력에 만료 날짜가 표시되지 않습니다. 또한 CTRL+ 로이 명령을 종료해야합니다 c.

스크립트에서 원격 인증서의 만료를 확인하고 (바람직하게는을 사용하여 openssl) 사용자 상호 작용없이 자동으로 실행되도록 "배치 모드"에서 수행하는 방법은 무엇입니까?


4
또한 -servername www.google.comSNI 가능 서버에 대해 서버 이름을 전송하는 것이 좋습니다. 종료의 필요성을 피하려면 / dev / null을 전송하십시오< /dev/null
syss

Red Hat / CentOS / Fedora를 실행중인 경우 certmonger를 살펴 보십시오 . 표준 리포지토리에서도 사용할 수 있습니다.
JRFerguson

nagios 또는 icinga와 같은 모니터링 도구에 인증서 확인을 추가합니다.
sebix

답변:


18

명령은 이제 GET index.php예를 들어 http 요청을 예상합니다 . 대신 이것을 사용하십시오 :

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: eof 다음에 입력이 없으므로 연결 후 openssl이 종료됩니다.
    • openssl ...: 질문의 명령
    • 2>/dev/null: 오류 출력이 무시됩니다.
  • openssl x509: X.509 인증서 데이터 관리를 활성화합니다.
    • 기본적으로 표준 입력에서 읽습니다.
    • -noout: 전체 인증서 출력을 억제합니다.
    • -checkend 0: 다음 0 초 내에 인증서가 만료되었는지 확인

-checkend날짜 산술을하고있는 스크립트보다 훨씬 쉽습니다!
Auspex

7

인증서를 얻지 만 디코딩하지는 않습니다. 당신이 날짜를 원한다면 그것이 필요할 것이기 때문에, 당신은 그것을 볼 수 없습니다. 따라서 필요한 것은 x509인증서를 해독하기 위해 OpenSSL의 응용 프로그램 으로 파이프하는 것입니다 .

openssl s_client -connect www.example.com:443 \
    -servername www.example.com </dev/null |\
    openssl x509 -in /dev/stdin -noout -text

유효 날짜를 포함하여 stdout에서 전체 디코딩 된 인증서를 제공합니다.


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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.