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 和參數衝突!

SSL 證書 什麼是CSR?-常見問題-文檔中心-騰訊雲

請注意! 你必須把這些選項放在域名列表之前。

例如

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 到別的機器上。
  • 設置 \$CAROOTrootCA.pem 所在目錄。
  • 運行 mkcert -install(arch linux 可以 sudo trust anchor --store rootCA.pem,其它發行版可以用自帶的命令手動添加來信任 CA)

請千萬記住 mkcert 是用於開發目的的,不建議用於生產,所以它不應該被用到用戶終端上,並且你不應該導出或者共享 rootCA-key.pem來源:https://github.com/jaywcjlove/linux-command

最後修改於: Wednesday, January 31, 2024

相關文章:

翻譯: