mkcert 是由 Filippo Valsorda 使用go語言開源的一款零配置搭建本地證書服務的工具,它可以兼容Window, Linux, macOS等多種開發平台,省去了我們自簽本地證書的繁瑣步驟,從而讓我們專注於開發。

1. 安裝mkcert
1.1 Windows
在Windows環境下,推薦使用Chocolatey包管理工具安裝mkcert,你可以選擇使用cmd或power shell安裝Chocolatey:
以管理員權限打開cmd窗口,輸入以下命令進行安裝
1 |
@"%SystemRoot%System32WindowsPowerShellv1.0powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%chocolateybin" |
以管理員權限打開power shell窗口,輸入以下命令進行安裝
1 |
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) |
Chocolatey安裝完成之后,命令行窗口輸入以下命令安裝mkcert
1 |
choco install mkcert |
1.2 Linux
以下假定使用的是全新的Linux系統!
首先更新軟件源,防止E: Unable to locate package的錯誤,
1 |
sudo apt update |
首先安裝證書數據庫工具certutil:
1 |
sudo apt install libnss3-tools // ubuntu |
然后,安裝包管理工具Linuxbrew:
1 |
sudo apt install linuxbrew-wrapper // ubuntu |
最后,使用brew安裝mkcert
1 |
brew install mkcert |
tips:可能需要執行兩次命令,同時不要使用sudo命令,系統會提示你不要使用root權限來執行brew。
在mkcert安裝目錄下啟動mkcert,推薦將mkcert加入全局命令,
1 |
PATH=$PATH:/home/linuxbrew/.linuxbrew/Cellar/mkcert/1.2.0/bin |
1.3 macOS
使用Homebrew安裝mkcert:
1 |
brew install mkcert |
2. 生成本地CA證書
2.1 生成根證書
mkcert安裝完成之后就可以使用mkcert命令生成本地CA證書了,非常簡單,傻瓜式安裝。
首先,生成根證書,一般在C:Users用戶名AppDataLocalmkcert目錄下會生成rootCA.pem和rootCA-key.pem兩個文件。
根證書用來充當第三方證書簽發機構,類似於Symantec這種機構,為網站簽發CA證書。因為證書也可以偽造,所以瀏覽器需要驗證證書的有效性,證書有效之后才可以進行https連接,而第三方簽發機構提供證書的可信度驗證。
rootCA文件就是告訴瀏覽器我們自簽的證書是真實有效的,接下來我們簽發的本地證書都離不開rootCA。
1 |
$ mkcert -install |
2.2 簽發本地證書
根證書生成之后就可以簽發本地證書了,命令超級簡單,唯一需要注意的就是生成的證書存放路徑就是命令的執行路徑。
1 |
$ mkcert example.com "*.example.org" myapp.dev localhost 127.0.0.1 ::1 |
2.3 root stores
mkcert支持以下根存儲(mkcert supports the following root stores:):
- macOS system store
- Windows system store
- Linux variants that provide either
- update-ca-trust (Fedora, RHEL, CentOS) or
- update-ca-certificates (Ubuntu, Debian) or
- trust (Arch)
- Firefox (macOS and Linux only)
- Chrome and Chromium
- Java (when JAVA_HOME is set)
這句話的意思就是說,mkcert會自動把證書加入系統認證,操作系統和瀏覽器可以直接識別。比如,證書安裝完成之后chrome的證書信任中心會增加以下內容:

2.4 node環境驗證
node不會使用root store,因此需要特殊對待,命令行手動設置NODE_EXTRA_CA_CERTS這個環境變量。
1 |
set NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem" |
** mkcert -CAROOT會輸出本地根證書的存儲路徑,可以使用環境變量$CAROOT來指定尋找證書的默認路徑。
使用node開啟https服務:
1 |
var https = require('https'); |
https進行訪問:

3. 分享
搞定了自己,接下來就要搞定別人,如何讓其它用戶也識別我們的本地證書呢?
mkcert同樣也給我們提供了可移植的解決方案。
將自簽證書(包括公鑰和私鑰)以及根證書的公鑰拷貝給其它用戶,修改$CAROOT環境變量,指定mkcert尋找根證書的路徑,
linux系統下:
1 |
export CAROOT="/home/..." |
window系統下:
設置系統的環境變量,變量名為CAROOT
我的電腦->屬性->高級系統設置->環境變量
最后執行mkcert -install即可,控制台會提示,此時我們的自簽證書就可以在其它機器上運行了,根證書被導入到了瀏覽器的證書信任中心。
1 |
The local CA is now installed in the system trust store! ⚡️ |
