Telegram 憑證監控機器人實作 EP4 — 憑證資訊處理

閱讀時間約 14 分鐘
raw-image

👨‍💻 簡介

前篇已經將 TG Bot 整合 MongoDB,現在要將一些函數修改,在對 DB 進行操作前,先對 domain 進行驗證操作。

🛠️ 使用工具

  • Python 3.9.6
  • MongoDB
  • TG Bot

📝 功能需求

  • 新增 domain 前檢查 domain 憑證
  • 透過 TG Bot 檢查所有 domain 是否有過期

🎯Setup

  1. 新增 domain 前檢查 domain 憑證

之前在撰寫 CloudFunction 時有使用到 get_ssl_cert_expiry_date 函數,在這裡先對這個函數做一個簡單的修改,將驗證憑證是否有效以及取得過期時間拆成兩個函數:

def get_ssl_cert_info(domain, check_only=False):
ssl_context = ssl.create_default_context()
with ssl_context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=domain) as conn:
conn.settimeout(3.0)
try:
conn.connect((domain, 443))
if check_only:
return True
else:
return conn.getpeercert()
except Exception as e:
print(f"無法獲取 {domain} 的 SSL,錯誤:{e}")
return False if check_only else None

def get_ssl_cert_expiry_date(cert):
if cert is None:
return None
try:
expire_date = datetime.strptime(cert["notAfter"], "%b %d %H:%M:%S %Y %Z")
return expire_date
except Exception as e:
print(f"Error parsing SSL certificate's expiry date: {e}")
return None

接著在 handle_add_command 新增這個函數做驗證:

@bot.message_handler(commands=["add"])
def handle_add_command(message):
try:
_, env, domain = message.text.split(maxsplit=2)
except ValueError:
bot.reply_to(
message, "使用方式不正確。請按照以下格式輸入:\n/add <env> <domain>"
)
return
# 驗證憑證
if get_ssl_cert(domain,check_only=True):
add_successful = add_domain_to_mongodb(collection, env, domain)

if add_successful:
bot.reply_to(message, f"域名添加成功\n環境為{env}\ndomain為{domain}")
else:
bot.reply_to(message, "域名添加失敗,請檢查輸入的數據。")
else:
bot.reply_to(message, "證書檢查失敗,請檢查輸入的域名是否正確。")

這樣就完成了添加前的驗證了,接著來處理對所有的 domain 進行檢查過期時間。

2. 透過 TG Bot 檢查所有 domain 是否有過期

這裡會用到之前在撰寫 CloudFunction 時使用的 check_ssl_expiration 以及 send_notification 兩個函數,多添加一個參數,改成傳入憑證取得過期時間,我們先稍微修改一下:

def check_ssl_expiration(
domain, cert, env, platform, telegram_bot_token, telegram_group_id
):
expire_date = get_ssl_cert_expiry_date(cert)
if expire_date:
remaining_days = (expire_date - datetime.utcnow()).days
if remaining_days <= 30:
message = "\n".join(
[
"來源: Python",
"標題: 憑證到期",
f"域名: {domain}",
f"到期日: {expire_date.strftime('%Y-%m-%d')}",
f"平台: {platform}",
f"環境: {env}",
]
)
print(f"{domain} 的 SSL 證書將在 {remaining_days} 天內過期。")
send_notification(message, domain, telegram_bot_token, telegram_group_id)
else:
print(
f"{domain} 的 SSL 證書過期日期是 {expire_date.strftime('%Y-%m-%d')}。"
)

def send_notification(message, domain, telegram_bot_token, telegram_group_id):
telegram_send_message_url = (
f"https://api.telegram.org/bot{telegram_bot_token}/sendMessage"
)
response = requests.post(
telegram_send_message_url, data={"chat_id": telegram_group_id, "text": message}
)
if response.status_code == 200:
print(f"已為 {domain} 發送通知")
else:
print(f"為 {domain} 發送失敗")

接著新增一個新檔案叫做 scheduler_jobs.py ,然後將之前的 check_ssl_cloud_function 重新命名並稍微做個修改:

def perform_ssl_checks(
bot, collection, chat_id, platform, telegram_bot_token, telegram_group_id
):
domain_data = load_domain_envs_from_mongodb(collection)
for env, domains in domain_data.items():
for domain in domains:
cert = get_ssl_cert(domain, check_only=False)
check_ssl_expiration(
domain, cert, env, platform, telegram_bot_token, telegram_group_id
)
bot.send_message(
chat_id, "所有域名的 SSL 到期時間檢查完成。", parse_mode="Markdown"
)

再來可以將 perform_ssl_checks 進行包裝:

def setup_scheduler(
bot, collection, chat_id, platform, telegram_bot_token, telegram_group_id
):
schedule.every(10).seconds.do(
perform_ssl_checks,
bot,
collection,
chat_id,
platform,
telegram_bot_token,
telegram_group_id,
)

最後就是在 main 裡進行調用:

import schedule

mongodb_uri = "mongodb://rootuser:rootpass@localhost:27017/mydatabase?authSource=admin"
telegram_bot_token = "your-bot-token"
bot = telebot.TeleBot(telegram_bot_token)
platform = "gcp"
telegram_group_id = "your-chat-id"
def run_schedule():
while True:
schedule.run_pending()
time.sleep(1)

if __name__ == "__main__":
client = init_mongo_client(mongodb_uri)
collection_name = "domains"
collection = get_collection(client, collection_name)
setup_scheduler(
bot, collection, telegram_group_id, platform, telegram_bot_token, telegram_group_id
)
# 創建一個 Thread 物件,target 指定了這個線程要執行的函數
t = threading.Thread(target=run_schedule)
# 啟動線程
t.start()
# 主線程繼續執行 Telegram bot 的無限輪詢
bot.infinity_polling()

這裡需注意,因為需要同時執行多個任務,像是定時檢查域名或是當有指令檢查所有域名,如果剛好某個操作比較耗時,會等到操作完,才執行下一個操作,因此需要使用到 threading Library,讓這些操作都可以在後台執行,不影響主程序,文件在這

使用的原因為:

  1. 非阻塞執行:在不使用 threading 的情況下,如果你的程式碼先執行定時任務的無限循環(如 run_schedule 函數),那麼程式將永遠停留在那個循環中,後面的代碼(如啟動 Telegram bot 的代碼)將永遠不會執行。使用 threading 可以讓定時任務在一個獨立的線程中運行,從而不會阻塞主線程上的其他操作。
  2. 提高效率:threading 允許多個操作同時進行,從而提高程式的執行效率。特別是在進行網路請求或者其他需要等待的操作時,多線程可以在等待時處理其他任務,提高資源利用率。

執行後可以在 terminal 看到如下資訊:

raw-image

TG 會顯示資訊如圖:

raw-image

而如果 30 天內快到期,顯示的資訊如圖:

raw-image

TG 資訊如圖:

raw-image

到此,基本的程式碼算是都完成了,下一篇會做簡單的整理程式碼,稍微優化。

如果想看完整程式碼可以參考這裡 🔗 專案 repo –> ep4-cert

17會員
81內容數
golang
留言0
查看全部
發表第一個留言支持創作者!
wang alan的沙龍 的其他內容
本文介紹如何使用 TG Bot 來操作 MongoDB,包括讀取所有 domain、讀取特定 domain、新增 domain、批量新增 domain、修改 domain 和刪除 domain。透過 TG Bot 的指令操作,實現了自動化管理和多環境管理。
👨‍💻 簡介 今天這篇主要是帶大家快速建立屬於自己的 Telegram bot,申請 bot 的部分我會附上網址,請準備好之後再來開始。 🛠️ 使用工具 Python 3.9.6 TG Bot 📝 功能需求 輸入指令讓 TG Bot 回傳訊息 接受傳入參數並進行簡單回傳 設定
學習如何使用Python連接MongoDB進行憑證監控,包括建立MongoDB docker-compose、連接MongoDB、讀取yaml並寫入MongoDB、傳入env以及domain寫入MongoDB、讀取MongoDB、修改MongoDB、刪除MongoDB。
👨‍💻簡介 最近因為憑證越來越多,需要監控什麼時候到期,當到期時發送到期通知,因此撰寫一個簡單的小程式來完成。 這次使用Python和Telegram Bot來監控SSL證書的到期時間並發送通知。並使用GCP工具,如CloudFunction和CloudScheduler做部署平台。
引言 在當今的技術世界中,Kubernetes 已成為容器化應用的領導平台。作為一個高效的容器編排系統,它不僅管理著容器的部署和擴展,還提供了必要的自動化支持,以保證應用的高可用性和性能。在這個框架中,自動擴展功能起著至關重要的作用,特別是在面對不斷變化的負載和需求時。
👨‍💻簡介 在當今的雲計算時代,容器化和微服務架構成為了重要趨勢。Kubernetes,作為領先的容器編排平台,提供了強大的功能來管理和部署應用程式。然而,隨著應用程式和用戶的增加,有效管理誰可以對 Kubernetes 集群執行何種操作變得至關重要。
本文介紹如何使用 TG Bot 來操作 MongoDB,包括讀取所有 domain、讀取特定 domain、新增 domain、批量新增 domain、修改 domain 和刪除 domain。透過 TG Bot 的指令操作,實現了自動化管理和多環境管理。
👨‍💻 簡介 今天這篇主要是帶大家快速建立屬於自己的 Telegram bot,申請 bot 的部分我會附上網址,請準備好之後再來開始。 🛠️ 使用工具 Python 3.9.6 TG Bot 📝 功能需求 輸入指令讓 TG Bot 回傳訊息 接受傳入參數並進行簡單回傳 設定
學習如何使用Python連接MongoDB進行憑證監控,包括建立MongoDB docker-compose、連接MongoDB、讀取yaml並寫入MongoDB、傳入env以及domain寫入MongoDB、讀取MongoDB、修改MongoDB、刪除MongoDB。
👨‍💻簡介 最近因為憑證越來越多,需要監控什麼時候到期,當到期時發送到期通知,因此撰寫一個簡單的小程式來完成。 這次使用Python和Telegram Bot來監控SSL證書的到期時間並發送通知。並使用GCP工具,如CloudFunction和CloudScheduler做部署平台。
引言 在當今的技術世界中,Kubernetes 已成為容器化應用的領導平台。作為一個高效的容器編排系統,它不僅管理著容器的部署和擴展,還提供了必要的自動化支持,以保證應用的高可用性和性能。在這個框架中,自動擴展功能起著至關重要的作用,特別是在面對不斷變化的負載和需求時。
👨‍💻簡介 在當今的雲計算時代,容器化和微服務架構成為了重要趨勢。Kubernetes,作為領先的容器編排平台,提供了強大的功能來管理和部署應用程式。然而,隨著應用程式和用戶的增加,有效管理誰可以對 Kubernetes 集群執行何種操作變得至關重要。
你可能也想看
Thumbnail
八十-二十法則提到,在多數生活的現象中,約80%的效果是來自於20%的原因,除了經濟學、學習理論外,這個法則同樣也可以應用在生活中的幸福感上。 我們需要認知到擁有的越多不一定會越快樂,反而有可能會因為無法專注在少數事物上而產生空虛、迷茫的感覺。「極簡」精神最重要的一點在於放下對於「多」的執著,將有
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
本次更新了貼圖教學內容,包括靜態貼圖上傳、動態貼圖上傳、貼圖轉移教學、表情貼上傳、貼圖拼貼、群組機器人設定和頻道機器人設定教學。
Thumbnail
想了解如何製作適合自己的TG群組機器人來管理群組嗎? 以下將詳細的逐步教學。
Thumbnail
在最近的一系列訪談中,Telegram創始人Pavel Durov揭露了他在保護用戶隱私與安全方面所面臨的巨大壓力,這些壓力來自美國政府和科技巨頭。在與Tucker Carlson等媒體採訪中,他詳細描述了FBI訪問他家、派遣特工施壓他和團隊以及試圖向他的員工行賄的經歷。
Thumbnail
Telegram是全球極為注重隱私且功能優越的通訊應用程式,深受眾多商業從業者的喜愛。擁有越多的訂閱粉絲,相當於為你開創更多的業績和收入機會。你可以考慮採用一種更迅速的方式,就是Telegram頻道買粉絲,以加速頻道的成長與發展。
Thumbnail
本篇方法為使用網頁工具製作動態貼圖, 相較於下方的方式,也可使用Canva製作符合尺寸的3秒GIF動畫,並轉檔為Webm檔,即可上傳Telegram使用。
Thumbnail
Telegram的貼圖,可透過Line貼圖商店,複製貼圖網址後貼於TG機器人moe_stickers_bot即可,無論是靜態貼圖、動態貼圖皆可。
Thumbnail
本篇章講述的是透過Photoshop製作逐格動畫來製作動態貼圖,只是此製作方式所製作的貼圖缺點為若使用的張數若不夠多,動作較容易卡頓,如需製作更為順暢的動態貼圖,可利用其他工具製作三秒的GIF短影片,即可上傳製作成功更加順暢的動態貼圖。
Thumbnail
線上祈禱 + 抽牌分享! 線上禱告+抽牌分享!( 可以 祈禱基督✨、向天使請求✨) https://t.me/star_yuki1657 大家可以一起集氣(正能量), 冥想祈禱、抽牌分享祝福! * 這個頻道不分宗教類別,任何人皆可冥想祈禱、分享祝福!
Thumbnail
「更長的電報」是昧於中國強大崛起的真相,才制訂出的空泛教戰守則。而搞倒「他國領導人」的策略更幼稚到鼓勵媒體造謠抹黑的烏賊戰。拜登對習近平品頭論足的人身言論,多少受其影響。而較溫和「克制派」則考慮廢除或修訂「台灣關係法」或賣武器,武裝臺灣。
Thumbnail
歡迎大家加入交流喔! https://t.me/joinchat/Vfa3-B1A_Qjl-DYgyvNuIg?fbclid=IwAR2N6k9lE0HGQ3i4i3yf64qEmprsVXfrGqdTARJLv6HW-BBwLj9v8PjFSr8
Thumbnail
八十-二十法則提到,在多數生活的現象中,約80%的效果是來自於20%的原因,除了經濟學、學習理論外,這個法則同樣也可以應用在生活中的幸福感上。 我們需要認知到擁有的越多不一定會越快樂,反而有可能會因為無法專注在少數事物上而產生空虛、迷茫的感覺。「極簡」精神最重要的一點在於放下對於「多」的執著,將有
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
本次更新了貼圖教學內容,包括靜態貼圖上傳、動態貼圖上傳、貼圖轉移教學、表情貼上傳、貼圖拼貼、群組機器人設定和頻道機器人設定教學。
Thumbnail
想了解如何製作適合自己的TG群組機器人來管理群組嗎? 以下將詳細的逐步教學。
Thumbnail
在最近的一系列訪談中,Telegram創始人Pavel Durov揭露了他在保護用戶隱私與安全方面所面臨的巨大壓力,這些壓力來自美國政府和科技巨頭。在與Tucker Carlson等媒體採訪中,他詳細描述了FBI訪問他家、派遣特工施壓他和團隊以及試圖向他的員工行賄的經歷。
Thumbnail
Telegram是全球極為注重隱私且功能優越的通訊應用程式,深受眾多商業從業者的喜愛。擁有越多的訂閱粉絲,相當於為你開創更多的業績和收入機會。你可以考慮採用一種更迅速的方式,就是Telegram頻道買粉絲,以加速頻道的成長與發展。
Thumbnail
本篇方法為使用網頁工具製作動態貼圖, 相較於下方的方式,也可使用Canva製作符合尺寸的3秒GIF動畫,並轉檔為Webm檔,即可上傳Telegram使用。
Thumbnail
Telegram的貼圖,可透過Line貼圖商店,複製貼圖網址後貼於TG機器人moe_stickers_bot即可,無論是靜態貼圖、動態貼圖皆可。
Thumbnail
本篇章講述的是透過Photoshop製作逐格動畫來製作動態貼圖,只是此製作方式所製作的貼圖缺點為若使用的張數若不夠多,動作較容易卡頓,如需製作更為順暢的動態貼圖,可利用其他工具製作三秒的GIF短影片,即可上傳製作成功更加順暢的動態貼圖。
Thumbnail
線上祈禱 + 抽牌分享! 線上禱告+抽牌分享!( 可以 祈禱基督✨、向天使請求✨) https://t.me/star_yuki1657 大家可以一起集氣(正能量), 冥想祈禱、抽牌分享祝福! * 這個頻道不分宗教類別,任何人皆可冥想祈禱、分享祝福!
Thumbnail
「更長的電報」是昧於中國強大崛起的真相,才制訂出的空泛教戰守則。而搞倒「他國領導人」的策略更幼稚到鼓勵媒體造謠抹黑的烏賊戰。拜登對習近平品頭論足的人身言論,多少受其影響。而較溫和「克制派」則考慮廢除或修訂「台灣關係法」或賣武器,武裝臺灣。
Thumbnail
歡迎大家加入交流喔! https://t.me/joinchat/Vfa3-B1A_Qjl-DYgyvNuIg?fbclid=IwAR2N6k9lE0HGQ3i4i3yf64qEmprsVXfrGqdTARJLv6HW-BBwLj9v8PjFSr8