SSL証明書をいくつか持っていますが、証明書の有効期限が切れたときに通知を受け取りたいです。
私のアイデアは、毎日簡単なコマンドを実行するcronjobを作成することです。
Linuxのopenssl
コマンドを使用して、リモートサーバーの証明書情報を表示できることを知っています。
openssl s_client -connect www.google.com:443
ただし、この出力には有効期限が表示されません。また、私はこのコマンドを CTRL+c。
スクリプトからリモート証明書の有効期限を確認し(できればopenssl
を使用)、「バッチモード」で実行して、ユーザーの操作なしで自動的に実行されるようにするにはどうすればよいですか?
コマンドは、たとえば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秒で期限切れになるかどうかを確認します証明書は取得されますが、デコードはされません。日付が必要な場合に必要になるため、表示されません。したがって、必要なのは、それをOpenSSLのx509
アプリケーションにパイプして、証明書をデコードすることです。
openssl s_client -connect www.example.com:443 \
-servername www.example.com </dev/null |\
openssl x509 -in /dev/stdin -noout -text
これにより、有効期限を含む完全なデコード済み証明書がstdoutに提供されます。
この ブログ投稿 のおかげで有効期限を確認する必要がある場合は、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