基于網路的普及和網速的提升,我們普通用戶也可以搭建自己的HTTP服務并開放到公網中方便我們隨時隨地訪問,如開源的智能家居系統Home Assistant、支持WebDAV協議的網盤、網路攝像機等,不過HTTP協議是使用明文傳輸方式來傳輸資訊的,當你訪問只支持HTTP協議的網站,在經過路由器、寬帶接入商等中間環節時,搜索的關鍵字、賬號密碼等都是可見的,這些資訊很容易被截獲從而造成重要資料的泄露,這樣就產生了由SSL + HTTP協議構建的可進行加密傳輸、身份認證的網路協議:HTTPS協議,在HTTPS協議下傳輸資料,客戶端會將資料加密后發送到服務器,服務器解密后獲得資料,反之亦然,在此程序中,資料通過密鑰進行加密,這樣即使中間環節劫持到內容也會因沒有密鑰無法破解,
下面我們就為自己的HTTP服務配置SSL證書并使服務可以從公網訪問,
一、申請域名并系結自己的公網IP地址
目前三大運營商基本都支持IPv6了,只要你有一個支持IPv6的路由器就可以為你的上網設備分配到公網IPv6地址,不過這個地址是會變動的,我們需要實時將變動后的IP地址系結到域名上,接下來我以dynv6的使用為例,申請域名并配置DDNS,
1.申請域名
到Free dynamic DNS for IPv6 (dynv6.com)這個網站使用郵箱注冊一下,在經過郵箱驗證后就可以創建自己的域名了,如下圖:

在Name后的文本框中給域名起個名字,點擊“Create Zone”按鈕,記錄下圖紅框中的域名和token

2.系結域名和IP地址
下載腳本dynv6.sh
使用WinSCP或SecureCRT等工具將腳本上傳到需要系結的設備中(我這里使用Armbian的root用戶做演示,將腳本上傳至/usr/local/bin目錄)
賦予腳本執行權限
cd /usr/local/bin
chmod u+x dynv6.sh
編輯定時任務
crontab -e
添加以下內容
* * * * * token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx /usr/local/bin/dynv6.sh v6test.dns.army
等待一分鐘后,查看當前目錄中是否生成.dynv6.addr6檔案(使用ls -la命令查看隱藏檔案)
查看檔案內容
cat .dynv6.addr6
使用以下命令決議域名v6test.dns.army的IP地址
nslookup v6test.dns.army 8.8.8.8
決議出來的IPv6地址與.dynv6.addr6中的一致則動態域名服務配置成功
3.配置泛域名
我們在自己創建的域名下切換到Records標簽,添加一條CNAME記錄,如下圖:

Name中填入“*”后點保存
二、安裝acme.sh并生成證書
1.安裝acme.sh
下載acme.sh
wget https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
解壓
tar -zxvf master.tar.gz
進入解壓后的目錄
cd acme.sh-master/
安裝到指定目錄并配置郵箱地址
./acme.sh --install \ --home /usr/local/acme.sh \ --accountemail [email protected]
安裝成功后可以洗掉下載的壓縮包和解壓目錄
cd .. && rm -rf acme.sh-master/ && rm -rf master.tar.gz
進入安裝目錄
cd /usr/local/acme.sh
配置acme自動更新
./acme.sh --home ./ --upgrade --auto-upgrade
2.生成域名對應的證書
設定dynv6的HTTP TOKEN
export DYNV6_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
生成證書
./acme.sh --home ./ --issue --dns dns_dynv6 -d v6test.dns.army -d *.v6test.dns.army
三、通過Caddy啟用HTTPS
1.下載Caddy
創建Caddy存放目錄
mkdir -p /usr/local/caddy
到Caddy官網(Download Caddy (caddyserver.com))下載對應平臺的二進制檔案(我使用的是Armbian 64位系統,平臺選擇Linux Arm64),選中帶有WebDAV插件的可執行程式,點擊下載

將下載好的Caddy程式上傳到/usr/local/caddy目錄中
修改程式名稱為caddy
cd /usr/local/caddy
mv caddy_linux_arm64_custom caddy
賦予執行權限
chmod u+x caddy
2.配置Caddyfile
創建SSL證書存放目錄
mkdir -p /usr/local/caddy/ssl
在/usr/local/caddy目錄創建Caddyfile檔案
vim Caddyfile
填寫配置內容
{
# 指定http埠為85
http_port 85
order webdav before file_server
}
# WebDAV服務,子域名設定為file,指定https埠為8443
file.v6test.dns.army:8443 {
# 設定/mnt/XiaoMi為可以被訪問的目錄,可自行修改為想要訪問的目錄
root * /mnt/XiaoMi
encode gzip
# 在Caddy目錄中使用以下命令生成密碼,此處以12345為例
# ./caddy hash-password --plaintext 12345
basicauth {
test JDJhJDE0JFo4TkxBUjQ1YTdZVXdQQ3BvUjA2Z09POTFSVkwzRnZLalh4QkY3OW14Rks3Q3pkRzkwWDdH
}
# 指定證書檔案存放位置,絕對路徑為/usr/local/caddy/ssl,此處使用Caddyfile檔案所在目錄(/usr/local/caddy)的相對路徑
tls ssl/full_chain.pem ssl/private.key
route {
rewrite /webdav /webdav/
webdav /webdav/* {
# 訪問WebDAV服務的前綴
prefix /webdav
}
# HTTP檔案服務,可以在瀏覽器中查看下載檔案
file_server browse
}
}
# 代理HomeAssistant
hass.v6test.dns.army:8443 {
encode gzip
tls ssl/full_chain.pem ssl/private.key
reverse_proxy localhost:8123
}
# 代理Portainer
docker.v6test.dns.army:8443 {
encode gzip
tls ssl/full_chain.pem ssl/private.key
reverse_proxy localhost:9001
}
# 代理OpenWrt
op.v6test.dns.army:8443 {
encode gzip
tls ssl/full_chain.pem ssl/private.key
reverse_proxy 192.168.2.202
}
3.使用acme.sh安裝證書
進入acme.sh目錄
cd /usr/local/acme.sh
安裝證書到指定目錄并重新載入caddy配置
./acme.sh --home ./ --install-cert -d v6test.dns.army \ --key-file /usr/local/caddy/ssl/private.key \ --fullchain-file /usr/local/caddy/ssl/full_chain.pem \ --reloadcmd "cd /usr/local/caddy && ./caddy reload"
進入證書存放目錄
cd /usr/local/caddy/ssl
可以看到已經生成full_chain.pem和private.key兩個檔案

4.驗證組態檔是否有效
回到caddy目錄
cd /usr/local/caddy
測驗組態檔是否正確
./caddy validate
沒有錯誤資訊則證明組態檔沒有問題
5.啟動Caddy
啟動Caddy
./caddy run
測驗配置的WebDAV和反向代理沒有問題的話可以后臺啟動
./caddy start
設定開機時自動運行Caddy
vim /etc/rc.local
在exit 0上面添加以下命令
cd /usr/local/caddy
nohup ./caddy run > /dev/null 2>&1 &
四、開放公網IPv6訪問埠
這里分別介紹Padavan和OpenWrt開放IPv6訪問埠的方法,
1.Padavan開啟IPv6外網訪問埠
(1)開啟路由器自身埠
ip6tables -A INPUT -p tcp --dport 85 -j ACCEPT ip6tables -A OUTPUT -p tcp --sport 85 -j ACCEPT ip6tables -A INPUT -p tcp --dport 8443 -j ACCEPT ip6tables -A OUTPUT -p tcp --sport 8443 -j ACCEPT
(2)開啟局域網其他設備埠
ip6tables -A FORWARD -p tcp --dport 85 -j ACCEPT ip6tables -A FORWARD -p tcp --dport 8443 -j ACCEPT
(3)開機自動開放埠
在“高級設定”->“自定義設定”->“腳本”->“在防火墻規則啟動后執行:”最后添加以下內容
# 開啟路由器自身埠
ip6tables -A INPUT -p tcp --dport 85 -j ACCEPT ip6tables -A OUTPUT -p tcp --sport 85 -j ACCEPT ip6tables -A INPUT -p tcp --dport 8443 -j ACCEPT ip6tables -A OUTPUT -p tcp --sport 8443 -j ACCEPT
或
# 開啟局域網其他設備埠
ip6tables -A FORWARD -p tcp --dport 85 -j ACCEPT ip6tables -A FORWARD -p tcp --dport 8443 -j ACCEPT
點擊最下面的“應用本頁面設定”
2.OpenWrt開啟IPv6外網訪問埠
(1)開啟路由器自身埠
ip6tables -I INPUT -p tcp --dport 85 -j ACCEPT ip6tables -I OUTPUT -p tcp --sport 85 -j ACCEPT ip6tables -I INPUT -p tcp --dport 8443 -j ACCEPT ip6tables -I OUTPUT -p tcp --sport 8443 -j ACCEPT
(2)開啟局域網其他設備埠
ip6tables -I FORWARD -p tcp --dport 85 -j ACCEPT ip6tables -I FORWARD -p tcp --dport 8443 -j ACCEPT
(3)開機自動開放埠
vim /etc/rc.local
在exit 0上面添加
# 開啟路由器自身埠 ip6tables -I INPUT -p tcp --dport 85 -j ACCEPT ip6tables -I OUTPUT -p tcp --sport 85 -j ACCEPT ip6tables -I INPUT -p tcp --dport 8443 -j ACCEPT ip6tables -I OUTPUT -p tcp --sport 8443 -j ACCEPT
或
# 開啟局域網其他設備埠 ip6tables -I FORWARD -p tcp --dport 85 -j ACCEPT ip6tables -I FORWARD -p tcp --dport 8443 -j ACCEPT
保存退出
四、使用Caddy配置的域名加埠訪問HTTPS服務
我們使用docker.v6test.dns.army:85這個地址訪問Portainer,可以看到地址欄網址會自動跳轉到https://docker.v6test.dns.army:8443,而且地址欄前面會顯示“連接安全” 的小鎖,如下圖:

這樣我們的HTTPS服務就配置完成了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/350707.html
標籤:其他
