정기적으로 Let's Encrypt 인증서를 업데이트하여 Slack에서 발표

Let's Encrypt



공개 사이트에서는 상시 SSL(AOSSL)의 대응이 필수가 되고 있어,
Let's Encrypt 은 인증서 발급이 무료이며 간단하며 최근 몇 년 동안 인기를 끌고 있습니다.
또한 2018년 1월부터 와일드카드 인증서 발급 개시 있습니다.
Let's Encrypt의 인증서 유효기간은 기본 3개월이며,
certbot이라는 간단한 인증서 발급 클라이언트를 이용합니다.


정기적으로 Let's Encrypt 인증서 업데이트



유효기간이 짧기 때문에, 자신은 cron 설정으로 정기적으로 갱신되도록 해 둡니다.
0 4 1 1,3,5,7,9,11 * root /usr/bin/systemctl stop httpd.service && /usr/bin/certbot renew --force-renew --quiet --post-hook "/usr/bin/systemctl start httpd.service"

정기적으로 Let's Encrypt 인증서를 업데이트하여 Slack에서 발표



그 상황을 Slack에 알리기 위해 다음과 같이 ShellScript로 사용자 정의했습니다.

ShellScript



ssl_certificate_renew.sh
#!/bin/bash

# WebHookのURL
WEBHOOK_URL='https://hooks.slack.com/services/***************************'

# メッセージを一時保存する場所
MESSAGEFILE=$(mktemp -t ssl-certificate-notice-XXXX)

# 送信先のチャンネル
CHANNEL=${CHANNEL:-'#lee_test'}

# 終了時に削除
trap "rm ${MESSAGEFILE}" 0


send_notice_to_slack_renew_start () {
    # 見出し
    hd=${HEAD:-"start to ssl certificate renew.\n"}

    # json形式に整形
    payload="payload={
        \"channel\": \"${CHANNEL}\",
        \"text\": \"${hd}\"
    }"

    curl -s -S -X POST --data-urlencode "${payload}" ${WEBHOOK_URL} > /dev/null
}

send_notice_to_slack_renew_success () {
    # 見出し
    hd=${HEAD:-"ssl certificate renew success.\n"}
    # 絵文字
    emoji=${EMOJI:-':carlton:'}

    # json形式に整形
    payload="payload={
        \"channel\": \"${CHANNEL}\",
        \"icon_emoji\": \"${emoji}\",
        \"text\": \"${hd}\"
    }"

    curl -s -S -X POST --data-urlencode "${payload}" ${WEBHOOK_URL} > /dev/null
}

send_notice_to_slack_renew_fail () {
    # 改行処理
    cat ${MESSAGEFILE} | tr '\n' '\\' | sed 's/\\/\\n/g' > ${MESSAGEFILE}

    # 絵文字
    emoji=${EMOJI:-':aaw_yeah:'}
    # 見出し
    hd=${HEAD:-"<!here>ssl certificate renew fail.\n"}
    # メッセージをシンタックスハイライト付きで取得
    msg='```'`cat ${MESSAGEFILE}`'```'

    # json形式に整形
    payload="payload={
        \"channel\": \"${CHANNEL}\",
        \"icon_emoji\": \"${emoji}\",
        \"text\": \"${hd}${msg}\"
    }"

    curl -s -S -X POST --data-urlencode "${payload}" ${WEBHOOK_URL} > /dev/null
}

send_notice_to_slack_renew_start

/usr/bin/systemctl stop httpd.service
/usr/bin/certbot renew --force-renew --quiet 2> ${MESSAGEFILE}
RENEW_RESULT=$?
/usr/bin/systemctl start httpd.service

if [ ${RENEW_RESULT} -eq 0 ]; then
  send_notice_to_slack_renew_success
else
  send_notice_to_slack_renew_fail
fi

그리고 ShellScript를 정기적으로 호출합니다.

cron


0 4 1 1,3,5,7,9,11 * root /bin/sh /run/ssl_certificate_renew.sh

결과



인증서 갱신 성공





인증서 갱신 실패





감사합니다.

좋은 웹페이지 즐겨찾기