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

賞味期限を確認したい場合は、このようにしてくださいブログ投稿、1回の呼び出しでこの情報やその他の関連情報を見つける方法を見つけました。

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

関連情報