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! ⚡️ |