期限切れのAPNs用pemファイルを更新し忘れました。
ので、今回はチェック用のcronを回すように設定。
SSLの証明書はopensslコマンドで有効期限を確認出来ます。
この有効期限を30日前になったらメールで通知してくれるように設定しました。
確認コマンドは下記サイトからコピーしてきました。
リンクを貼ろうと思ったのですが、
ブログを書いている時はサーバダウンしてました。
https://raim.codingfarm.de/blog/2013/03/07/checking-expiry-dates-of-local-and-remote-ssl-certificates/
下にコマンドをコピーしておきますので、
ssl-cert-checkと名付けて、実行権限を付けて保存して下さい。
保存したら、Jenkinsに、
/usr/local/share/ssl-cert-checker 30 "/path/to/certificate/"*.pemのシェルを実行と設定。
crontabへ設定してもいいです。
これを1日に1回実行するように設定して下さい。
もし、cronで設定する場合には、MAILTO=を設定して下さい。
これで、Jenkinsのエラーと共に、
Push通知の更新期限が迫っている通知も飛んでくるようになりました。
#!/usr/bin/env bash # vim: set fenc=utf-8: # Copyright (c) 2013, Rainer Müller <raimue@codingfarm.de> # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Version 2013-03-07 # http://raim.codingfarm.de/blog/2013/03/07/checking-expiry-dates-of-local-and-remote-ssl-certificates/ #### Usage #### # # ./ssl-cert-check <days> <certspec1,certspec2,...> # # This tool will warn you if any of the specified certificates expires in the # next <days> days. # # The first parameter is the number of days to warn in advance for expiring # certificates. All following parameters are treated as certificate # specifications and can be in one of the following formats: # # - An absolute path to a x509 PEM certificate file # For example: # /etc/apache2/ssl/example.org.pem # # - A file://<path> URI # For example: # file:///etc/apache2/ssl/example.org.pem # # - A ssl://<host>:<port> URI # For example: # ssl://example.org:443 # # - A <proto>://<host>[:<port>] URI, this is the same as ssl://<host>:<proto>. # The real port number is usually looked up in /etc/services, note that # you often need the one with the 's' suffix, like "https", "imaps", etc. # For example: # https://example.org # imaps://example.org (same as ssl://example.org:993) # # - A <proto>+starttls://<host>[:<port>] URI # Use the STARTTLS command to start a in-protocol TLS session after # opening an unencrypted connection. The openssl s_client needs to # support this protocol. At time of this writing, the supported protocols # are "smtp", "pop3", "imap", "ftp" and "xmpp". # For example: # imap+starttls://example.org # smtp+starttls://example.org:587 # # Example for your crontab: # MAILTO=root # 6 6 * * * nobody /usr/local/bin/ssl-cert-check 30 /etc/apache2/ssl/*.crt /etc/ssl/certs/dovecot.pem https://localhost ssl://localhost:465 smtp+startssl://localhost:587 # #### #### #### # First parameter specifies if certificate expire in the next X days DAYS=$1 shift if [[ ! $DAYS =~ ^[0-9]+$ ]]; then echo "Error: missing parameter <days> or invalid number" >&2 exit 3 fi if [ $BASH_VERSINFO -lt 4 ]; then echo "Error: this script requires bash >= 4.0" >&2 exit 3 fi # We need extended globbing shopt -s extglob exitcode=0 for cert in "$@"; do enddate="" # For ease of use, map any absolute path name to a file:// URL if [[ $cert =~ ^/(.*)$ ]]; then cert=file://$cert fi # Split URI into protocol and target if [[ $cert =~ ^(.*)://(.*)$ ]]; then proto=${BASH_REMATCH[1]} target=${BASH_REMATCH[2]} else echo "Error: invalid certificate specification: $cert" >&2 if [ $exitcode -lt 2 ]; then exitcode=2 fi continue fi port="" extra="" case $proto in file) enddate=$(openssl x509 -checkend $(( 86400 * $DAYS )) -enddate -in "$target") ;; !(ssl)) # Handle special protocol definition for STARTTLS if [[ $proto =~ ^(.*)\+starttls$ ]]; then proto=${BASH_REMATCH[1]} extra="-starttls $proto" fi # If no port was given, use the default for this protocol if [[ ! $target =~ :[0-9]+$ ]]; then target+=:$proto fi # (intentional fallthrough) ;& ssl) # Retrieve certificate certificate=$(echo | openssl s_client -connect "$target" $extra 2>/dev/null \ | sed -n -e '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' \ -e '/-----END CERTIFICATE-----/q') if [ "$certificate" == "" ]; then echo "Error: unable to check $cert" >&2 if [ $exitcode -lt 2 ]; then exitcode=2 fi continue else # Extract notAfter date of validity enddate=$(echo "$certificate" | openssl x509 -checkend $(( 86400 * $DAYS )) -enddate) fi ;; esac if [[ $enddate =~ (.*)Certificate\ will\ expire ]]; then echo "==> Certificate $cert is about to expire soon:" echo -n " ${BASH_REMATCH[1]}" if [ $exitcode -lt 1 ]; then exitcode=1 fi fi done exit $exitcode
0 件のコメント:
コメントを投稿