使用caddy實現非標准端口https


近來使用Halo搭建博客,並順便把WeHalo小程序也把玩了起來,但是發現幾個非常棘手的問題:

  1. 根據訪問日志發現有三方在刷取關鍵接口的請求,http請求在部分情況下會暴露出很顯著的安全問題;
  2. 小程序強制依賴https,非https連接不能使用,嘗試三方開源的v-request替換也是效果不太好;
  3. 第三個問題是由以上問題衍生的,如果升級https網站域名首先就是需要備案,對於個人博客來說,穩定性要求沒有那么高,備案流程復雜,想想還是算了吧;

那能怎么辦呢?條件不夠,技術來湊。

眾所周知,http和https請求的默認端口分別為80和443,那么能否實現非標准端口的https呢,這樣就能繞過未備案的限制。

經過對https資料的查找,發現有很大希望實現,有這么關鍵的幾點。

https基本原理就不在熬述了,直接引用資料原文:

通過 ACME 協議向 Let's Encrypt 證明自己的域名所有權的過程就叫做 Challenge (驗證),目前有三種 Challenge 的方式:

  • HTTP-01
  • NS-01
  • TLS-SNI-01 (已禁用)
  • TLS-ALPN-01

HTTP-01是目前最常見的驗證方式,但是該驗證方式需要通過80端口開放一個路徑給Let's Encrypt訪問它提供的 token來驗證你的域名所有權,因此在80端口被封鎖的情況下這個驗證方式是不現實的;

類似的,TLS-ALPN-01需要通過443端口訪問來驗證,也是行不通;

這樣對於國內家庭帶寬用戶來說就只剩下了一種方式:DNS-01。

了解這些后,解決方案就一目了然了,就是用DNS-01方式進行https驗證。

有了這些信息,想法可行,接下來就是尋找合適的工具來實現了。

caddy給我們進行了很好的集成,基於golang的caddy就是一個編譯過后的二進制文件,輕巧、實用。

caddy原生https的實現是基於Let's Encrypt的,想要使用DNS-01的https實現需要附帶插件,這里我們阿里雲的dns服務商,需要選擇 github.com/caddy-dns/lego-deprecated;

下載完成后的caddy文件就是包含附件的可執行文件了;

接下來我們編寫Caddyfile配置文件,有兩個配置要點:

  1. 指定http和https監聽端口;
  2. 配置請求指向;
{
  http_port 1234
  https_port 2234
}
xxx {
  reverse_proxy localhost:8081
  tls {
    dns lego_deprecated alidns
  }
}

配置完成還不行,我們需要按照lego_deprecated的文檔,建立文件,配置以下:

ALICLOUD_ACCESS_KEY=xxx
ALICLOUD_SECRET_KEY=xxx

關鍵參數(此部分參數需要從阿里雲后台進行獲取),便於聯系對應dns進行相關的操作;

最后使用caddy指令帶上配置好的文件直接啟動

caddy run --config Caddyfile --envfile alidns.env

大功告成!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM