iT邦幫忙

2025 iThome 鐵人賽

DAY 15
0
Cloud Native

與雲原生精靈共舞:APISIX使用者的兩年旅程系列 第 15

Ch10 - 幫大衛穿衣服,避免網路裸奔:APISIX設定HTTPS憑證的方式

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250929/201124701wtdXqBZnM.png

在「新竹百貨公司」的例子,剛開幕時沒請到警衛,走的都是HTTP通道,這就像是裸體去逛街。

https://ithelp.ithome.com.tw/upload/images/20250929/20112470sd32P66Z7c.png
(圖片來源: https://commons.wikimedia.org/wiki/File:%27David%27_by_Michelangelo_FI_Acca_JBU_009.jpg)

在這個例子中,將會教你如何透過設定APISIX的HTTPs,讓大衛穿上衣服,不致於被人看光光。在此之前,需要先準備HTTPS(TLS)的憑證和金鑰。這裡簡化做法,使用mkcert建立,若有興趣我以前也寫過更詳細的做法

我的實驗環境是Ubuntu,可以直接透過apt安裝:

apt install mkcert

https://ithelp.ithome.com.tw/upload/images/20250929/20112470g0ZDSxFNAV.png

後續也會提供金鑰和憑證。如果你不會安裝使用mkcert,也可以檢查直接使用我提供的金鑰和憑證。

然後可以直接執行:

mkcert xn--55qx5d0y0ax0p39ed04a.com

https://ithelp.ithome.com.tw/upload/images/20250929/20112470G6BKNokRNL.png

就會產生金鑰和憑證兩份檔案,效期預設應該往後兩年(圖片例子到2027-12-10):

  • xn--55qx5d0y0ax0p39ed04a.com-key.pem
  • xn--55qx5d0y0ax0p39ed04a.com.pem

通常來說會再使用mkcert -install,安裝mkcert使用的根憑證,讓系統在與mkcert簽發的憑證時,不致於出現警告或錯誤。不過現代瀏覽器信任的根憑證有可能由瀏覽器自己管理,這部分作爲示範也不是必須的,依然可以透過忽略警告的方式繼續瀏覽,因此我示範就不進行這個命令,但你仍然可以安裝根憑證。

憑證內容分別是:

xn--55qx5d0y0ax0p39ed04a.com.pem

-----BEGIN CERTIFICATE-----
MIIEKDCCApCgAwIBAgIQJNvxf+nC+lKQufAXvNdoOjANBgkqhkiG9w0BAQsFADBl
MR4wHAYDVQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExHTAbBgNVBAsMFHZib3h1
c2VyQGs4cy1ub2RlLTAxMSQwIgYDVQQDDBtta2NlcnQgdmJveHVzZXJAazhzLW5v
ZGUtMDEwHhcNMjUwOTEwMjAxMzM0WhcNMjcxMjEwMjAxMzM0WjBIMScwJQYDVQQK
Ex5ta2NlcnQgZGV2ZWxvcG1lbnQgY2VydGlmaWNhdGUxHTAbBgNVBAsMFHZib3h1
c2VyQGs4cy1ub2RlLTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
l/dMTU21cibq9EMw5UIkk8L+Yyd6N8/9lrYvUMeevXiWHps7fAJU2cj3QLwIFCka
BW7XZKZo9lmI1ozLWu/MXT69P+LrnaaWQzh0/ZZLrdJOC7OVB8eGoDw9RQSj76+G
VUb3nt67sc6AKg63aLYHAGs41ZtJiamrYSE59C157iKNa+lmm/Hg60KmKFiSYfYc
sWMjK97aQi4vbhKzsYNGERRHrxqe4tX29eYvQqxnf94EpQdbX4t6k1j06qfwtytZ
YCfx27PqC5DF4PybVJuuv5HgkqQ/oonc8ITWP4B8HbLtNktjVkWLxcWTiJak/caZ
Xq7lQnykbrdD6Cx+Fv4aZwIDAQABo3EwbzAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0l
BAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAUngPmVwlREbJFIILy6zdPUHK7ZFYw
JwYDVR0RBCAwHoIceG4tLTU1cXg1ZDB5MGF4MHAzOWVkMDRhLmNvbTANBgkqhkiG
9w0BAQsFAAOCAYEAhUZ77+zKEZIf1OEaOwiM8S5WE0eiUB/Hhb+29z5lul4SZyZm
nlGAHABKH/vRsWv8kuYtktLMb0C/1dQ5iHpfy71+5FgjVjNGAKn6OXOGZzmzJGdK
8GS38FfAvngD2/f8AgKU8QzvvLq6n3QS+a+LV1r6NOrvh/skDUNJS0KQRXnnwGqb
U5dEUW4jkCXJafFA+G2tu54C8IyjdI8eWvs1ry1wf1R6TJ66xQVvL8eCu+A19nLb
e5fT9UmldGh8L6YYhuTiOZVLRaCAxRXzqXdmyPwU6a24YI76PMdGAotuLoOl4Lbs
7sIcjk2vsLtrQnpICh2biMmgxDgixqgFtgrW+Hc+A6rnNi0d1EVn7g0NG/Kcus+8
F1XKHe/Krgu12bsz1DN8fIiLFShu/iCshciap9wvB6O+1R9wx9ZL4de7V4Yioau8
ZUgaEK1/2kgI+0rSidY3fcykZXXmpI2F49exbJQa4eX7eOXqhmn0LIq8JBFR/PXr
GGxs0qDXyO0Snx9t
-----END CERTIFICATE-----

以及xn--55qx5d0y0ax0p39ed04a.com-key.pem

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCX90xNTbVyJur0
QzDlQiSTwv5jJ3o3z/2Wti9Qx569eJYemzt8AlTZyPdAvAgUKRoFbtdkpmj2WYjW
jMta78xdPr0/4uudppZDOHT9lkut0k4Ls5UHx4agPD1FBKPvr4ZVRvee3ruxzoAq
DrdotgcAazjVm0mJqathITn0LXnuIo1r6Wab8eDrQqYoWJJh9hyxYyMr3tpCLi9u
ErOxg0YRFEevGp7i1fb15i9CrGd/3gSlB1tfi3qTWPTqp/C3K1lgJ/Hbs+oLkMXg
/JtUm66/keCSpD+iidzwhNY/gHwdsu02S2NWRYvFxZOIlqT9xpleruVCfKRut0Po
LH4W/hpnAgMBAAECggEAS1eEMN9SEiJRYoDdgQxl7gxC6w3rfjhUVaBFnRsbDHz4
kHwN5dGSF9eXHjUbHEO0bvUhPPl0GI8TVKvBNnilLaWpVj8+6Y5p+THIbuFQ7ADU
SODkBlNZ359+EPXYAUFYrHbe1ZlAHUtwJ2ncbMGyfvap2t1+fA3utd0vSmwxg2pC
dpibwk82Xf5qPtcjh/J0wrgG/TGXdWj6NPHv6U3Du7GDTM5wG+Dna1afuZ6FOyD/
x31xZbYvfpuKXDyzMnH8ZqwePReU4F9UP++WmOPMUA9XQ75csC28n4uoDvyImjqg
Vv0F6GG/olnrLlzpziy3i70eLLdAjB+gqKrKhuHLYQKBgQDEM/+etv9e7MLSjQBn
XiiUA0qSt53FSrzNa8SYU7sd7Y2yGxN5Q32tXmfokHMfJSisdJjjRPf9b0sY2Wuz
lRefk1ktaz624HcykN5B7o3Z4+F4eZlapptsq+gVxauHeO+zy892ej0Q71PFVahb
Bz6lSufys/PxJBOiGhwcS1pHawKBgQDGR94J3Vw0jRm/BHABrH1KPRtbDqzkICA7
zBDdmh7pIL4XRw2x6TWIDbEOD54sMrKcerQsoYdQeil1pNReS0o5nxsvZKgdA2ua
8gvUZlGcmqzp6svsVrVThAz7Q04y5XhKtIje+0yVqBK2FmCH9gnYt99zkQtCSDYL
8le1NCSD9QKBgHIAAJN4orLGAIEUGlr1M8CklOzgsVQUE9WLu4QCiqNeBsmov8zi
sSBNzTQs0icTkSl66eaLiUgBJXI/yjti8oHuvI8OVDcv/zIrSGioslUa+kPk63zn
d0FSNRyJaRvi4evnDRk690ZiuJrdJWAWuoiSGGlFtAS1wI6cex7ZjZAXAoGBAMBc
5thRLmw5W/oKtxOYoXDNueVsZmVnmX4J627iYAyyXFk+8NViuDGHfvdyRXUBtnDD
RltqVlnIOsLMp8/XYWpnprsi/0oukE2hd8KXhaPWF91UkoR2VrJwkRuPX6VXJI3t
ekBCMzmZ9pU7PmmJVGIxeRKoa/DhF7YdZeQBc0+lAoGAOn+Rpn/FuKKrBrbDbs0m
GZHlLM3TDYYrpj3/4DFYXdzJA2BW2oEvjJXIJ9ttCkU4xOn812FRQGMtKXJz3ROb
nnGIqLVMxKmuHXFgKZyU0w5FWAv8kEMMKV9dIjdNyuMKcNcejP9uMys+gLBfsoqC
pJpRGpCP3ot8vfNReodlVAM=
-----END PRIVATE KEY-----

接著開啓Dashboard的SSL設定頁面:

https://ithelp.ithome.com.tw/upload/images/20250929/20112470aGLdauBwLV.png

將兩個值分別填入:

https://ithelp.ithome.com.tw/upload/images/20250929/20112470YRuATqEu3f.png

畫面會自動帶入SNI(Server Name Indication),注意SNI需要與路由的host設定應匹配,也就是xn--55qx5d0y0ax0p39ed04a.com

https://ithelp.ithome.com.tw/upload/images/20250929/20112470uWCDFsHti3.png

然後就可以瀏覽 https://新竹百貨公司.com:9443/

使用的APISIX版本是3.2.2。嘗試使用3.13.0存在一些問題,需要自行解決。
另外,如果與我同樣沒有信任mkcert根憑證,瀏覽頁面應該會出現警告,忽略即可。

SNI無法自動識別的情況:

有些憑證可能APISIX可能無法自動識別SNI。像是有可能沒有設定SAN,直接在主體(Subject)申明可用的域名。也就無法透過Dashboard的Web UI設定。需要透過Admin API進行設定:

curl --request POST \
  --url 'http://localhost:9180/apisix/admin/ssls' \
  --header 'Content-Type: application/json' \
  --header 'X-API-KEY: SaiTJp7TEa9K39oy7D5A4ouXmdqHvL9a' \
  --data '{
	"snis": ["*.example.com"],
	"key": "<Replace KEY>",
	"cert": "<Replace CERT>"
}'

上一篇
Ch9 - 流量的「天氣預報」:透過 Admin API 調整上游權重,確保 APISIX 零停機部署
系列文
與雲原生精靈共舞:APISIX使用者的兩年旅程15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言