Skip to content

Let's Encrypt

Tuesday, 02 Jul 2024
       

ข้อควรรู้ !!!

ก่อนที่จะดำเนินการ Add/Renew Cert. จะต้องทำตามขั้นตอนตั้งค่า Acme ก่อน

Add/Renew

  • เพิ่มชื่อโดเมนที่ไฟล์ domain.txt จะอยู่ที่ /root/domain.txt โดเมนล่าสุดจะต้องกด ENTER เพื่อเว้นบรรทัด
text
mydomain.com
youdomain.net
  • สร้างไฟล์ kong-acme.sh
bash
#!/bin/sh
# --------------------------------------------------
#   Kong ACME Pingin: Let's Encrypt
#   https://docs.konghq.com/hub/kong-inc/acme
# --------------------------------------------------
#   Created:  26.05.2023
#   Update:   23.07.2024
# --------------------------------------------------
#   Let's Encrypt Command
#   Update Account email:
#     $ certbot update_account --email email@email.com
# --------------------------------------------------
DOMAIN_FILE="./domain.txt"

# Read domain from file
i=1
while read GET_DOMAIN
do
  # Skip comment[#]
  if [[ "$GET_DOMAIN" != *#* ]]; then
    DOMAIN[$i]=$GET_DOMAIN
    i=$i+1
  fi
# Get File
done < $DOMAIN_FILE

clear
TITLE_MENU="Select Menu[1-3]: "
RETURN_MENU=("Renew SSL" "Check SSL" "Quit")
MENU=("Renew SSL" "Check SSL" "Quit")
PS3=$TITLE_MENU

echo "-------------------------"
echo "| Kong ACME *All Domain |"
echo "| Select Menu           |"
echo "-------------------------"

select choose_menu in "${RETURN_MENU[@]}"

do
case $choose_menu in

# --------------------------------------------------
#   Renew SSL
# --------------------------------------------------
  "Renew SSL")

  ### Renew certificate
  clear
  echo ""
  echo "### Renew Certificates ###"
  echo ""
  for (( i=1; i<=${#DOMAIN[@]}; i++ )) ; do
    echo "[DOMAIN] ${DOMAIN[i]}"

    ### Update routes *** Before renew ***
    MSG1=$(curl -s --request PATCH \
    --url http://localhost:8001/routes/${DOMAIN[i]} \
    --data https_redirect_status_code="426" \
    --data protocols="http")
    MSG1_CODE=$(echo $MSG1 | jq -r .https_redirect_status_code)
    MSG1_PROTOCAL=$(echo $MSG1 | jq -r .protocols[])
    echo "[BEFORE] set status code: '$MSG1_CODE', set protocol: '$MSG1_PROTOCAL'"

    sleep 1

    ### Create certificate
    MSG2=$(curl -s http://localhost:8001/acme -d host=${DOMAIN[i]} | jq -r .message)
    echo "[MESSAGE] ${MSG2}"

    sleep 1

    ### Update route *** After renew ***
    MSG3=$(curl -s --request PATCH \
    --url http://localhost:8001/routes/${DOMAIN[i]} \
    --data https_redirect_status_code="302" \
    --data protocols="https")
    MSG3_CODE=$(echo $MSG3 | jq -r .https_redirect_status_code)
    MSG3_PROTOCAL=$(echo $MSG3 | jq -r .protocols[])
    echo "[AFTER] set status code: '$MSG3_CODE', set protocol: '$MSG3_PROTOCAL'"
    echo ""

    sleep 3
  done

  ### Get certificate Detail
  ### apt install jq
  echo ""
  echo "### Certificates ###"
  for (( i=1; i<=${#DOMAIN[@]}; i++ )) ; do

    ### ACME certificates response
    ### .data.not_after = json key
    EXP=$(curl -s http://localhost:8001/acme/certificates/${DOMAIN[i]})
    EXPIRE=$(echo $EXP | jq -r .data.not_after)

    echo "[DOMAIN] ${DOMAIN[i]}"
    echo "[CERT. EXP.] $EXPIRE"
    echo ""

    sleep 1
  done

  echo "1) Renew SSL"
  echo "2) Check SSL"
  echo "3) Quit"
  ;;

# --------------------------------------------------
#   Check SSL
# --------------------------------------------------
  "Check SSL")
    ### Get certificate Detail
    ### apt install jq
    clear
    echo ""
    echo "### Certificates ###"
    echo ""
    for (( i=1; i<=${#DOMAIN[@]}; i++ )) ; do

      ### ACME certificates response
      ### .data.not_after = json key
      EXP=$(curl -s http://localhost:8001/acme/certificates/${DOMAIN[i]})
      EXPIRE=$(echo $EXP | jq -r .data.not_after)

      echo "[DOMAIN] ${DOMAIN[i]}"
      echo "[CERT. EXP.] $EXPIRE"
      echo ""

      sleep 1
    done

    echo "1) Renew SSL"
    echo "2) Check SSL"
    echo "3) Quit"
  ;;

# --------------------------------------------------
#   Quit
# --------------------------------------------------
  "Quit")
  clear
  break
  ;;

  *)
  esac
done
  • run script ด้วยคำสั่ง
bash
bash kong-acme.sh
  • เลือกข้อ 1) Renew SSL จากนั้น script ก็จะนำโดเมนที่อยู่ในไฟล์ domain.txt มาทำการขอ cert.
  • ถ้าสร้าง cert. สำเร็จจะแสดงข้อความ [CERT. EXP.] วันหมดอายุ ตามรูปด้านล่าง

Check Expire

  • เลือกข้อ 2) Check SSL เพื่อตรวจสอบวันหมดอายุของโดเมนทั่งหมด จากไฟล์ domain.txt

Built with: VitePress.