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

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

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

관련 정보