(Let's Encrypt、DigiCert…) | 不同(CA 簽) | **不跳警告**
系統/瀏覽器內建信任清單已收錄 | | **內部 / 私有 CA**
(這次採用的方案) | 不同(CA 簽) | **跳警告,除非裝過**
沒人幫你把根憑證塞進別人的信任清單 | | **自簽憑證**
(Self-signed,原本的做法) | 相同(自己簽自己) | **跳警告**,且被弱掃判定為弱憑證 | 弱掃報告原文寫「未由受信任的公開憑證機構或公司內部 CA 簽發」——把內部 CA 跟公開 CA 並列為合格解法,這代表這條檢查看的是「Issuer 是否等於 Subject」這個結構性問題,不是要求連驗證機也要信任這張 CA。 --- ## 04 這個專案怎麼串起來 `launcher` 每次啟動實際發生的順序,對照 `backend/src/standalone.ts` 與 `backend/src/launcher/certs.ts`。 1. **偵測區網 IP** `detectLanIp()` 抓這台機器目前的區網 IP(Wi-Fi/網路線換了、DHCP 重配都可能改變)。 2. **確保有本機 CA** `ensureCa()` 檢查有沒有一份效期 10 年的本機 CA;沒有就產生一份,key/cert 都只留在伺服器的 `data/certs/` 資料夾。 3. **簽發綁定該 IP 的憑證** `ensureCert()` 用這張 CA 簽一張 Leaf 憑證:Issuer 是 CA、Subject/SAN 是偵測到的 IP、sha256 簽章。IP 若跟上次不同就重簽,CA 不用重建。 4. **啟動 HTTPS server** `https.createServer()` 拿 Leaf+CA 憑證與私鑰起服務,只允許 TLS 1.2 以上與前向保密加密套件。 5. **瀏覽器才願意開鏡頭** 使用者連上 `https://