iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
Modern Web

AI 驅動的 Web 資安新時代系列 第 6

DAY6 - HTTPS 與憑證安全:AI Agent 自動檢查弱點

  • 分享至 

  • xImage
  •  

HTTPS 就像網站的門鎖,若憑證過期或設定錯誤,等於門是虛掩的。

很多服務中斷事件,都是因為憑證忘了更新。

傳統上要人工定期檢查,但現在我們可以讓 AI Agent 自動檢查與提醒 。


常見憑證弱點

  • 憑證過期 (Expired SSL)
  • 使用不安全的加密演算法 (例如 SHA1)
  • 缺少中繼憑證 (Chain incomplete)
  • TLS/HTTPS 設定過於寬鬆 (支援過時的 TLS 1.0/1.1)

AI Agent 自動檢查流程

  1. 連線到目標網站
  2. 抓取憑證資訊
  3. 檢查到期日與 TLS 版本
  4. 自動輸出報告,甚至整合到 Slack/Line 提醒

1、憑證檢查

  • 使用 Node.js 內建的 tls 模組,連線到目標網站
  • 抓取憑證資訊(valid_fromvalid_toissuer 等)
  • 計算剩餘天數 daysLeft,方便 AI 做判斷
  • 如果網站連不上,會回傳錯誤
async function checkSSL(domain, port = 443) {
   return new Promise((resolve, reject) => {
      const socket = tls.connect(port, domain, { servername: domain }, () => {
         const cert = socket.getPeerCertificate();
         if (!cert || !cert.valid_to) {
            reject(`無法取得憑證 (${domain})`);
         } else {
            const expiryDate = new Date(cert.valid_to);
            const daysLeft = Math.round(
               (expiryDate - new Date()) / (1000 * 60 * 60 * 24)
            );
            resolve({
               domain,
               expiryDate,
               daysLeft,
               subject: cert.subject,
               issuer: cert.issuer,
            });
         }
         socket.end();
      });
      socket.on("error", (err) => reject(`連線錯誤 (${domain}): ${err.message}`));
   });
}

2、初始化 LLM (Gemini)

  • 使用 Google Gemini API,需要申請 API Key,並放在 .env 檔中 (GEMINI_API_KEY)
  • 模型名稱建議用 gemini-1.5-flash(速度快,適合即時分析),或 gemini-1.5-pro(推理能力更強)
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

3、執行流程

  • 設定要檢查的 domain(範例:google.com
  • 呼叫 checkSSL() 抓憑證資訊
  • 把資訊丟給 Gemini,請它用繁體中文寫報告
async function run() {
   const domains = [
      "google.com",
   ];

   for (const domain of domains) {
      console.log(`\n 檢查 ${domain`);
      try {
         const result = await checkSSL(domain);

         // 交給 Gemini 分析憑證
         const prompt = `
         網域: ${result.domain}
         到期日: ${result.expiryDate}
         剩餘天數: ${result.daysLeft}
         簽發者: ${JSON.stringify(result.issuer)}

         請用繁體中文分析:
         1. 這張憑證是否安全?
         2. 是否快過期?
         3. 建議的行動。
         `;

         const analysis = await model.generateContent(prompt);
         console.log("AI 分析報告:\n", analysis.response.text());

      } catch (err) {
         console.error("檢查失敗:", err);
      }
   }
}

run();

備註:加入通知功能

目前程式只會在終端機輸出結果。

如果希望在憑證快過期時,能自動收到提醒,可以額外加上 Email / Line Notify / Slack 等通知機制。


上一篇
DAY5 - 新時代的資安挑戰:自動化攻防對抗
下一篇
Day7 - CSP 策略最佳化:由 Agent 自動生成與測試
系列文
AI 驅動的 Web 資安新時代8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言