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
版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
- 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。