mkcert
用來生成自簽證書的工具
示例
mkcert 是 GO 編寫的,一個簡單的零配置的用來生成自簽證書的工具。
下面給一個簡單的示例,在本地生成自簽證書,並使用讓 nc 使用生成的證書。
 1~ ·········································································································································  10:46:25
 2❯ mkcert -install
 3The local CA is already installed in the system trust store! 👍The local CA is already installed in the Firefox and/or Chrome/Chromium trust store! 👍
 4~ ·········································································································································  10:46:34
 5❯ mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1
 6
 7Created a new certificate valid for the following names 📜 - "example.com"
 8 - "*.example.com"
 9 - "example.test"
10 - "localhost"
11 - "127.0.0.1"
12 - "::1"
13
14Reminder: X.509 wildcards only go one level deep, so this won't match a.b.example.com ℹ️
15
16The certificate is at "./example.com+5.pem" and the key at "./example.com+5-key.pem" ✅
17It will expire on 30 January 2025 🗓
18
19~ ·········································································································································  10:47:37
20❯ ls             
21公共  視頻  文檔  音樂  aria          aria2-downloads  Dockerfile             example.com+5.pem  GOPATH  minio-binaries  nowip_hosts.txt  tech_backend.jar
22模板  圖片  下載  桌面  aria2-config  cv_debug.log     example.com+5-key.pem  go                 math    navicat_reset   src
23~ ·········································································································································  10:47:55
24❯ ncat -lvp 1589 --ssl-key example.com+5-key.pem --ssl-cert example.com+5.pem 
25Ncat: Version 7.92 ( https://nmap.org/ncat )
26Ncat: Listening on :::1589
27Ncat: Listening on 0.0.0.0:1589
28Ncat: Connection from 127.0.0.1.
29Ncat: Connection from 127.0.0.1:39156.
30Ncat: Failed SSL connection from 127.0.0.1: error:00000000:lib(0):func(0):reason(0)
mkcert 自動生成並安裝一個本地 CA 到 root stores,並且生成 locally-trusted 證書。mkcert 不會自動使用證書來配置服務器,不過,這取決於你。
安裝
Warning:
mkcert自動生成的rootCA-key.pem文件提供了完整的能力來攔截你機器上的安全請求。請不要分享它。
macOS
1$ brew install mkcert
2$ brew install nss # 如果用 Firefox 的話
Linux
在 Linux 上,首先要安裝 certutil
1$ sudo apt install libnss3-tools
2#    -or-
3$ sudo yum install nss-tools
4#    -or-
5$ sudo pacman -S nss
6#    -or-
7$ sudo zypper install mozilla-nss-tools
然後可以使用 Homebrew on Linux 來安裝。
1$ brew install mkcert
或者從源碼構建(要求 Go 1.13+)
1git clone https://github.com/FiloSottile/mkcert && cd mkcert
2go build -ldflags "-X main.Version=$(git describe --tags)"
又或者使用 預構建的二進制文件。
1$ curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"
2$ chmod +x mkcert-v*-linux-amd64
3$ sudo cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert
對於 Arch Linux 用戶(比如我),mkcert 在 Arch Linux 官方倉庫中可用。
1$ sudo pacman -S mkcert
Windows
使用 Chocolatey
1$ choco install mkcert
或者使用 Scoop
1$ scoop bucket add extras
2$ scoop install mkcert
或者從源碼構建(要求 Go 1.10+) ,或者使用 預構建的二進制文件。
如果遇到權限問題,請使用管理員運行 mkcert
支持的 root stores
mkcert 支持以下 root stores:
- macOS system store
 - Windows system store
 - Linux 發行版提供
update-ca-trust(Fedora,RHEL,CentOS)或者update-ca-certificates(Ubuntu,Debian,OpenSUSE,SLES)或者trust(Arch)
 - Firefox (僅 macOS 和 Linux)
 - Chrome 和 Chromium
 - Java(當 
JAVA_HOME被設置時) 
爲了把 local root CA 裝到這些 root stores 中,你可以設置 TRUST_STORES 環境變量到一個逗號分隔的 list。有這些選項:"system","java" 和 "nss"(包括了 Firefox)。
高級 topics
高級選項
1-cert-file FILE, -key-file FILE, -p12-file FILE
2    # 自定義輸出路徑.
3-client # 生成供客戶端認證使用的證書.
4-ecdsa  # 生成使用一個 ECDSA (一種橢圓曲線簽名算法)key 來生成證書.
5-pkcs12 # 生成一個 ".p12" PKCS #12 文件,也可以被識別爲 ".pfx" 文件,
6        # 包含 cert 和 key for legacy applications.
7-csr CSR # 生成一個給予 CSR(證書籤名申請) 的證書。
8         # 與除了 -install 和 -cert-file 以外的其它所以 flag 和參數衝突!
請注意! 你必須把這些選項放在域名列表之前。
例如
1mkcert -key-file key.pem -cert-file cert.pem example.com *.example.com
S/MIME (郵件安全證書)
用下面這種方式 mkcert 會生成一個 S/MIME 證書:
1mkcert filippo@example.com
移動設備
對於要讓移動設備信任證書的情況,你得安裝 root CA。就是 rootCA.pem 這個文件,可以通過 mkcert -CAROOT 打印出這個文件所在的目錄。
在 iOS 上,你也可以使用 AirDrop,把 CA 郵件發給你自己,或者通過一個 HTTP server 提供它。在打開它之後,你需要 install the profile in Settings > Profile Downloaded and then enable full trust in it 。
對於 Android ,你得安裝這個 CA 然後在應用程序的開發版本中啓用 user roots。可以看一看這個 StackOverflow 回答 。
用 Node.js 來使用這個 root
Node 不使用 system root store,所以它不會自動接受 mkcert 證書。相反,你得設置 NODE_EXTRA_CA_CERTS 環境變量。
1export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"
改變 CA 文件的位置
CA 證書和它的 key 被存儲在用戶家目錄的一個文件夾中。一般來說你不會想去關注它的位置,因爲它會被自動裝載。但是你可以通過 mkcert -CAROOT 來打印這個目錄位置。
如果你想要管理單獨的 CA 們,你可以使用 \$CAROOT 環境變量來設置 mkcert 放置和尋找 CA files 的路徑。
在其它系統上安裝 CA
安裝 trust store 不需要 CA key(只要 CA),所以你可以導出 CA,並且使用 mkcert 來安裝到其它機器上。
- 找到 
rootCA.pem文件,可以用mkcert -CAROOT找到對應目錄。 - 把它 copy 到別的機器上。
 - 設置 
\$CAROOT爲rootCA.pem所在目錄。 - 運行 
mkcert -install(arch linux 可以sudo trust anchor --store rootCA.pem,其它發行版可以用自帶的命令手動添加來信任 CA) 
請千萬記住 mkcert 是用於開發目的的,不建議用於生產,所以它不應該被用到用戶終端上,並且你不應該導出或者共享 rootCA-key.pem 。
來源:https://github.com/jaywcjlove/linux-command
版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
 - 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。