我們平時在本地開發時,有時會要求透過 HTTPS 請求來訪問。一個通用的做法是用 OpenSSL 生成自簽證照,然後對 Web 服務進行配置。但 OpenSSL 的命令比較繁瑣,引數也比較複雜,用起來不夠方便。於是我找到了一個替代方案:mkcert,和大家分享下。
專案介紹
mkcert 是一個用於生成本地自簽名 SSL 證照的開源工具,專案基於 Golang 開發,可跨平臺使用,不需要配置,支援多域名以及自動信任 CA。
準備工作
我準備模擬一個區域網內訪問 Web 服務的場景,因此開始前需要:
伺服器:用於提供 Web 服務,安裝 nginx 並開啟 SSL,系統為 CentOS 7.8。
PC 端:一臺 Win10 電腦,用於測試訪問,與伺服器處於同一區域網。
下載安裝
首先,根據自己的系統,下載最新的二進位制檔案,這裡我下載的版本為 v1.4.3:
[root@localhost ~]# wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64
為二進位制檔案新增可執行許可權,並移動到 $PATH 中:
[root@localhost ~]# chmod +x mkcert
[root@localhost ~]# mv mkcert /usr/local/bin/
檢查 mkcert 的版本:
[root@localhost ~]# mkcert -version
v1.4.3
如果版本顯示正常,說明安裝無誤。接下來,我們看看 mkcert 是如何建立證照的。
使用說明
mkcert 生成證照的命令很簡單,格式如下:
mkcert domain1 [domain2 [...]]
多個域名/IP用空格分隔,一個自簽名的證照可以這樣建立:
[root@localhost ~]# mkcert 192.168.128.134 example.com localhost 127.0.0.1 ::1
Note: the local CA is not installed in the system trust store.
Note: the local CA is not installed in the Firefox and/or Chrome/Chromium trust store.
Run "mkcert -install" for certificates to be trusted automatically
Created a new certificate valid for the following names
- "192.168.128.134"
- "example.com"
- "localhost"
- "127.0.0.1"
- "::1"
The certificate is at "./192.168.128.134+4.pem" and the key at "./192.168.128.134+4-key.pem"
It will expire on 7 September 2023
在這個證照中,192.168.128.134 是伺服器的內網地址。命令執行後會生成兩個檔案:192.168.128.134+4-key.pem 和 192.168.128.134+4.pem,前者是私鑰,後者是證照。
由於伺服器上已經裝了 nginx,也配置了 SSL,所以在命令中可以加入 -cert-file 和 -key-file 引數,將檔案直接生成到對應的目錄裡:
[root@localhost ~]# mkcert -cert-file /etc/nginx/ssl/server.crt -key-file /etc/nginx/ssl/server.key 192.168.128.134 example.com localhost 127.0.0.1 ::1
啟動 nginx 服務,然後從 PC 端訪問 192.168.128.134 檢視效果:
可以看到,瀏覽器訪問到了頁面,但連線是不安全的。而我們在本地開發時,可能會對連線的安全性有要求,那有沒有辦法建立安全的連線呢?
重點操作
正如介紹所言,mkcert 支援自動信任 CA,所以只要安裝好 CA 證照就能解決這個問題。
回到伺服器,執行以下命令將 mkcert 的認證機構安裝到伺服器上:
[root@localhost ~]# mkcert -install
CA 證照的位置可以透過以下命令檢視:
[root@localhost ~]# mkcert -CAROOT
/root/.local/share/mkcert
該目錄中有兩個檔案:rootCA-key.pem 和 rootCA.pem。將 rootCA.pem 複製到 PC 上,並將其字尾改為 .crt。
雙擊 rootCA.crt,根據提示安裝證照,步驟如下:
重啟瀏覽器再次訪問,可以看到連線已經變為安全:
寫在最後
在這篇文章中,我們透過 mkcert 建立了自簽名的 SSL 證照,並建立了安全的訪問連線。與 OpenSSL 相比,mkcert 的使用更加簡單,簡化了在內網搭建 HTTPS 環境的複雜性。
本作品採用《CC 協議》,轉載必須註明作者和本文連結