HTTPS 就像網站的門鎖,若憑證過期或設定錯誤,等於門是虛掩的。
很多服務中斷事件,都是因為憑證忘了更新。
傳統上要人工定期檢查,但現在我們可以讓 AI Agent 自動檢查與提醒 。
tls
模組,連線到目標網站valid_from
、valid_to
、issuer
等)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}`));
});
}
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" });
google.com
)checkSSL()
抓憑證資訊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 等通知機制。