【Golang】SSL証明書の期限切れを通知してみる【terminal-notifier】

2月 12, 2022

どもです。先近服はGiltで購入することが多いsaisaiです。


本日は前回記事にしたGolangを用いてSSL証明書の期限を取得するプログラムを応用し、
期限切れだった場合Macのディスプレイに通知するようにしてみます。


ちなみに前回の記事はこちら


先日個人で保守を担当させてもらっているHPのSSL証明書期限が切れていることに気付けず
ご迷惑をおかけしたので色々対策を考えていこうと思っております。


本日はその第一弾の試みとなります。

Homebrewをインストールする

今回はmacのディスプレイへのアラート通知としてterminal-notifierを使用します。


terminal-notifierをインストールするにはHomebrewが必要です。
Homebrewをインストールすることでローカル上でパッケーをインストール
できる"brew"コマンドを使用することができるようになります。


下記のコマンドラインをターミナルで実行しインストールしましょう。

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

パスワードを求められた場合はログインパスワードを入力してください。
Homebrewのバージョンを確認しインストールが完了しているかを確認します。

$ brew -v
Homebrew 3.1.3

これでterminal-notifierをインストールする準備が整いました。

terminal-notifierをインストールする

それではterminal-notifierをインストールしていきましょう。


ターミナル上でbrewコマンドを使用してインストールします。

$ brew install terminal-notifier

以上です。試しに下記コマンドを実行してみましょう。

$ terminal-notifier -title "テスト" -message "テストメッセージ"

無事ディスプレイに通知されましたでしょうか。

Goを使用した通知プログラムの作成

では、Goを使用したSSL期限確認、期限切れの場合はterminal-notifierでディスプレイに通知する
コードを書いてみます。


出来上がったものがこちら

package main

import (
	"fmt"
	"net/http"
	"time"
	"os/exec"
)

func main() {
	url := fmt.Sprintf("https://ドメイン名/")
	resp, _ := http.Get(url)

	expireUTCTime := resp.TLS.PeerCertificates[0].NotAfter
	expireJSTTime := expireUTCTime.In(time.FixedZone("Asia/Tokyo", 9*60*60))
	expireDate := expireJSTTime.Format("2006/01/02 15:04")
	today := time.Now().Format("2006/01/02 15:04")

	if today > expireDate {
		exec.Command("terminal-notifier", "-message","\"ドメインのSSL更新確認\"", "-sound","default").Run()
	}
}

内容は冒頭で紹介した記事とあまり変化はないですが、terminal-notifierを
使用し期限切れの場合はディスプレイに通知する設定を追加しました。


あとはこのコードをコンパイルしてcronなどで定期的に実行してみてください。

あとがき

というわけで今回はSSL期限切れをプッシュ通知するプログラムを組んでみました。


まあ正直なところ通知を見逃すと対処できないので、通知するのとは別にファイルに
ログを書き込んでおくなどした方が良さそうですが今回は割愛します。


もっとスマートな監視方法はないものか…。


最後まで読んでいただきありがとうございます。saisaiでした!


↓オススメ教材

Golang

Posted by CY