最近我在企業內部環境,嘗試使用 Let's Encrypt 免費憑證,搭配 win-acme
工具在 IIS 建立 HTTPS 架站。想法很單純:「內網 IP + 自架 DNS domain + 免費憑證」不就剛剛好?
但實際操作後,我發現:
❌ 若 domain name 不能被 Let's Encrypt 的伺服器從外部正常連線驗證,就算一切設定正確,還是會「永遠簽不過」。
工具 | 角色 |
---|---|
Let's Encrypt | 免費的憑證機構(CA),負責發出 SSL 憑證 |
win-acme | Windows 專用的憑證申請工具,協助自動完成申請、驗證、安裝與續期 |
你可以把它們的關係想成這樣:
你(管理者) ←→ win-acme(助理) ←→ Let's Encrypt(CA) ←→ 憑證產生 → 裝到 IIS
10.120.100.171
www.sitea.com
http://www.sitea.com
來登入 EIP 系統結果:失敗多次。
Invalid response from http://www.sitea.com/.well-known/acme-challenge/xxx: 404
Authorization result: invalid
✅ win-acme 成功放入驗證檔案,但 Let's Encrypt 無法從外部抓到。
這是一個很多人會好奇但 實際不能做的錯誤操作。
即使你把站台設成 www.google.com
,並在 hosts 檔中加入 127.0.0.1 www.google.com
,Let's Encrypt 驗證時仍會走它自己的 DNS → 連到 Google 真實伺服器 → 找不到驗證檔案 → 驗證失敗。
若重試太多次還可能觸發封鎖,甚至導致出網 IP 被列為濫用來源。
可以!這是最標準且推薦的方式:
www.mydomain.com → EC2 公網 IP
https://www.mydomain.com
是否成功項目 | 免費憑證(Let's Encrypt) | 付費憑證(DigiCert、GlobalSign 等) |
---|---|---|
成本 | ✅ 免費 | ❌ 年費 |
有效期 | 90 天(自動續期) | 1 年以上 |
驗證層級 | DV(域名驗證) | 可選 DV / OV / EV |
顯示公司名稱 | ❌ 否 | ✅ 是 |
適合場景 | 個人站、內網、測試 | 商業站、金融、B2B 串接 |
做那項實驗的時候,
OS dns快取跟瀏覽器本身的DNS快取都要清除。
https://hackmd.io/@dennisxkimo/SJnNZKsVxx
我曾經拿花錢簽發憑證 内網測試 搭配修改 hosts 瀏覽器是給過的。
Domain name > 指向 實體IP , http(80) 指向 ACME certbot 電腦的web,就可以簽發成功。
再把簽回來的憑證,掛在真的https(443)的web服務。
當然同一台也是可以,但更新時間與防火牆的開放80排程可以做好,不用時時刻刻都開80 port。
我個人是利用docker container跑acme更新憑證,再將憑證檔丟到正式的https web server去生效。
https://hackmd.io/@dennisxkimo/rkeOK7Jyel