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私が見つけたスクリプトよりもずっと簡単で、日付計算をしていました!
オースペックス

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

有効期限を確認する必要がある場合は、このブログ投稿のおかげで、この情報を他の関連情報とともに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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.