LoginSignup
26
27

More than 5 years have passed since last update.

iOSプッシュ通知用SSL証明書の有効期限をシェルスクリプトで監視する。

Last updated at Posted at 2015-10-12

経緯

先日、iOS向けプッシュ通知用SSL証明書の有効期限が切れており、
慌てて証明書の再作成と監視の実装を行いました。

意外にも、iOS向けプッシュ通知用SSL証明書の有効期限監視の情報出てこなくて困りました。
なので、備忘兼/誰かのお役に立てればと…。

ちなみに、プッシュ通知用のサーバに以下のログが出ており、
ログ監視していたおかげで気づくことができました。危なかった…。
※いや手遅れだったのだけれども。。。

ERROR: Unable to connect to 'ssl://gateway.push.apple.com:2195'

前提(2015/10/13追記)

Appleのプッシュ通知サーバとやり取りするサーバに下記が入っていること。

  • プッシュ通知用SSL証明書
  • bcコマンド、exprコマンド
  • opensslコマンド
  • nrpe(Nagiosを使用する場合)
  • slack通知用のスクリプト(slackへの通知をする場合)

Nagiosサーバがあること(Nagiosで監視する場合のみ)

監視方法(概要)

SSL証明書の有効期限監視?そんなのNagiosのcheck_httpプラグインでチョロいっす!

…と言いたいところですが、今回監視したいのはAppleのプッシュ通知サーバとやり取りするための証明書の有効期限。
WEBサーバのSSL証明書の有効期限ではないので、check_httpでは監視できません。。

なので、

  1. opensslコマンドで有効期限を引っ張る。
  2. dateコマンドでUNIX_TIMEに変換。
  3. 引き算&割り算して残り何日か計算し、if文で判定して結果をNagiosに返す。

というスクリプトを作成しました。

拙作なサンプルスクリプト

参考にさせていただいた記事

監視方法詳細

1.opensslコマンドで証明書の有効期限を引っ張ります。

# openssl x509 -in <証明書ファイルのパス> -text |sed -e '/Not After/{s/^.* : //;p};d'  
Jun 13 09:50:42 2016 GMT
# 

2.後で残り何日?って計算したいので、UNIX_TIMEに変換します。

# date '--date=Jun 13 09:50:42 2016 GMT' +%s
1465811442
#

3.現在の日付を取得してUNIX_TIMEに変換します。

# date +%s
1444651962
#

4.bcコマンドで引き算して、残り日数(秒数)を求めます。
※後から気づいたけど、ここもexprで良い気がする。最初違うやり方でやろうとしてた際の名残ですね。。。

# echo 1465811442 - 1444651701|bc
21159741
#

5.有効期限(秒数)を日数に変換します。

# expr 21159741 / 86400
244
#

6.後はお決まりのif文で判定して、nagiosが判定出来るように終了コードを返してやれば終わりです。

  • 2015/10/12 21:34追記

  • 蛇足ですが、nagiosは以下のようにステータス判定します。

終了コード0…正常
終了コード1…warning
終了コード2…critical
その他…unknown

最後、駆け足になってしまいましたが、こんな感じです。
もっとスマートなやり方等あれば、是非ご指摘ください。

通知をslackに飛ばしたい時(2015/10/13追記)

Nagiosとか立ててないよ!って場合には、以下のような感じでslackにでも飛ばしてあげましょう。

### Main Routine
if [ "${DAYS_LEFT}" -le 15 ]; then
        ./slack.sh "NG" "NG - ${CERT_FILE} is remind ${DAYS_LEFT} days. Expire Date is ${JST_DATE}"
        exit 2;
elif [ "${DAYS_LEFT}" -le 30 ]; then
        ./slack.sh "NG" "NG - ${CERT_FILE} is remind ${DAYS_LEFT} days. Expire Date is ${JST_DATE}"
        exit 1;
else
        ./slack.sh "OK" "OK - ${CERT_FILE} is remind ${DAYS_LEFT} days. Expire Date is ${JST_DATE}"
        exit 0;
fi

slack通知のサンプルスクリプト

https://github.com/koitatu/zabbix_scripts/blob/master/slack.sh

分かりやすいslack通知導入の記事

http://codenote.net/slack/2768.html (2015/11/01 修正 inncoming Webhookなのでこっちでしたorz)

http://lab.aratana.jp/entry/2014/12/05/124822  (incomming Webhookじゃないならこっち)

Nagiosとの連携だけど、非常に分かりやすい記事です。

26
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
27