如何快速建立自簽名 SSL 證書 -- [mkcert]

Weiwen發表於2022-01-20
    我們平時在本地開發時,有時會要求透過 HTTPS 請求來訪問。一個通用的做法是用 OpenSSL 生成自簽證照,然後對 Web 服務進行配置。但 OpenSSL 的命令比較繁瑣,引數也比較複雜,用起來不夠方便。於是我找到了一個替代方案:mkcert,和大家分享下。

專案介紹

    mkcert 是一個用於生成本地自簽名 SSL 證照的開源工具,專案基於 Golang 開發,可跨平臺使用,不需要配置,支援多域名以及自動信任 CA

準備工作

我準備模擬一個區域網內訪問 Web 服務的場景,因此開始前需要:

    伺服器:用於提供 Web 服務,安裝 nginx 並開啟 SSL,系統為 CentOS 7.8PC 端:一臺 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 協議》,轉載必須註明作者和本文連結
最美的不是下雨天,而是和你一起躲過的屋簷!

相關文章