| 
 | 1 | +# mkcert  | 
 | 2 | + | 
 | 3 | +用来生成自签证书的工具。  | 
 | 4 | + | 
 | 5 | +## 示例  | 
 | 6 | + | 
 | 7 | +`mkcert` 是 GO 编写的,一个简单的**零配置**的用来生成自签证书的工具。  | 
 | 8 | + | 
 | 9 | +下面给一个简单的示例,在本地生成自签证书,并使用让 nc 使用生成的证书。  | 
 | 10 | + | 
 | 11 | +```zsh  | 
 | 12 | +~ ·········································································································································  10:46:25  | 
 | 13 | +❯ mkcert -install  | 
 | 14 | +The 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! 👍  | 
 | 15 | +~ ·········································································································································  10:46:34  | 
 | 16 | +❯ mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1  | 
 | 17 | + | 
 | 18 | +Created a new certificate valid for the following names 📜 - "example.com"  | 
 | 19 | + - "*.example.com"  | 
 | 20 | + - "example.test"  | 
 | 21 | + - "localhost"  | 
 | 22 | + - "127.0.0.1"  | 
 | 23 | + - "::1"  | 
 | 24 | + | 
 | 25 | +Reminder: X.509 wildcards only go one level deep, so this won't match a.b.example.com ℹ️  | 
 | 26 | +
  | 
 | 27 | +The certificate is at "./example.com+5.pem" and the key at "./example.com+5-key.pem" ✅  | 
 | 28 | +It will expire on 30 January 2025 🗓  | 
 | 29 | +
  | 
 | 30 | +~ ·········································································································································  10:47:37  | 
 | 31 | +❯ ls               | 
 | 32 | +公共  视频  文档  音乐  aria          aria2-downloads  Dockerfile             example.com+5.pem  GOPATH  minio-binaries  nowip_hosts.txt  tech_backend.jar  | 
 | 33 | +模板  图片  下载  桌面  aria2-config  cv_debug.log     example.com+5-key.pem  go                 math    navicat_reset   src  | 
 | 34 | +~ ·········································································································································  10:47:55  | 
 | 35 | +❯ ncat -lvp 1589 --ssl-key example.com+5-key.pem --ssl-cert example.com+5.pem   | 
 | 36 | +Ncat: Version 7.92 ( https://nmap.org/ncat )  | 
 | 37 | +Ncat: Listening on :::1589  | 
 | 38 | +Ncat: Listening on 0.0.0.0:1589  | 
 | 39 | +Ncat: Connection from 127.0.0.1.  | 
 | 40 | +Ncat: Connection from 127.0.0.1:39156.  | 
 | 41 | +Ncat: Failed SSL connection from 127.0.0.1: error:00000000:lib(0):func(0):reason(0)  | 
 | 42 | +```  | 
 | 43 | +
  | 
 | 44 | +`mkcert` 自动生成并安装一个本地 CA 到 root stores,并且生成 locally-trusted 证书。`mkcert` 不会自动使用证书来配置服务器,不过,这取决于你。  | 
 | 45 | +
  | 
 | 46 | +## 安装  | 
 | 47 | +
  | 
 | 48 | +> Warning: `mkcert` 自动生成的 `rootCA-key.pem` 文件提供了完整的能力来拦截你机器上的安全请求。请不要分享它。  | 
 | 49 | +
  | 
 | 50 | +### macOS  | 
 | 51 | +
  | 
 | 52 | +```zsh  | 
 | 53 | +brew install mkcert  | 
 | 54 | +brew install nss # 如果用 Firefox 的话  | 
 | 55 | +```  | 
 | 56 | +
  | 
 | 57 | +### Linux  | 
 | 58 | +
  | 
 | 59 | +在 Linux 上,首先要安装 `certutil`  | 
 | 60 | +
  | 
 | 61 | +```zsh  | 
 | 62 | +sudo apt install libnss3-tools  | 
 | 63 | +    -or-  | 
 | 64 | +sudo yum install nss-tools  | 
 | 65 | +    -or-  | 
 | 66 | +sudo pacman -S nss  | 
 | 67 | +    -or-  | 
 | 68 | +sudo zypper install mozilla-nss-tools  | 
 | 69 | +```  | 
 | 70 | +
  | 
 | 71 | +然后可以使用 [Homebrew on Linux](https://docs.brew.sh/Homebrew-on-Linux) 来安装。  | 
 | 72 | +
  | 
 | 73 | +```zsh  | 
 | 74 | +brew install mkcert  | 
 | 75 | +```  | 
 | 76 | +
  | 
 | 77 | +或者从源码构建(要求 Go 1.13+)  | 
 | 78 | +
  | 
 | 79 | +```zsh  | 
 | 80 | +git clone https://github.com/FiloSottile/mkcert && cd mkcert  | 
 | 81 | +go build -ldflags "-X main.Version=$(git describe --tags)"  | 
 | 82 | +```  | 
 | 83 | +
  | 
 | 84 | +又或者使用 [预构建的二进制文件](https://github.com/FiloSottile/mkcert/releases)。  | 
 | 85 | +
  | 
 | 86 | +```zsh  | 
 | 87 | +curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"  | 
 | 88 | +chmod +x mkcert-v*-linux-amd64  | 
 | 89 | +sudo cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert  | 
 | 90 | +```  | 
 | 91 | +
  | 
 | 92 | +对于 Arch Linux 用户(比如我),[`mkcert`](https://www.archlinux.org/packages/community/x86_64/mkcert/) 在 Arch Linux 官方仓库中可用。  | 
 | 93 | +
  | 
 | 94 | +```zsh  | 
 | 95 | +sudo pacman -S mkcert  | 
 | 96 | +```  | 
 | 97 | +
  | 
 | 98 | +### Windows  | 
 | 99 | +
  | 
 | 100 | +使用 [Chocolatey](https://chocolatey.org/)  | 
 | 101 | +
  | 
 | 102 | +```zsh  | 
 | 103 | +choco install mkcert  | 
 | 104 | +```  | 
 | 105 | +
  | 
 | 106 | +或者使用 Scoop  | 
 | 107 | +
  | 
 | 108 | +```zsh  | 
 | 109 | +scoop bucket add extras  | 
 | 110 | +scoop install mkcert  | 
 | 111 | +```  | 
 | 112 | +
  | 
 | 113 | +或者从源码构建(要求 Go 1.10+) ,或者使用 [预构建的二进制文件](https://github.com/FiloSottile/mkcert/releases)。  | 
 | 114 | +
  | 
 | 115 | +如果遇到权限问题,请使用管理员运行 `mkcert`  | 
 | 116 | +
  | 
 | 117 | +## 支持的 root stores  | 
 | 118 | +
  | 
 | 119 | +`mkcert` 支持以下 root stores:  | 
 | 120 | +
  | 
 | 121 | +- macOS system store  | 
 | 122 | +
  | 
 | 123 | +- Windows system store  | 
 | 124 | +
  | 
 | 125 | +- Linux 发行版提供  | 
 | 126 | +    | 
 | 127 | +  - `update-ca-trust` (Fedora,RHEL,CentOS)或者  | 
 | 128 | +    | 
 | 129 | +  - `update-ca-certificates` (Ubuntu,Debian,OpenSUSE,SLES)或者  | 
 | 130 | +    | 
 | 131 | +  - `trust` (Arch)  | 
 | 132 | +
  | 
 | 133 | +- Firefox (仅 macOS 和 Linux)  | 
 | 134 | +
  | 
 | 135 | +- Chrome 和 Chromium  | 
 | 136 | +
  | 
 | 137 | +- Java(当 `JAVA_HOME` 被设置时)  | 
 | 138 | +
  | 
 | 139 | +为了把 local root CA 装到这些 root stores 中,你可以设置 `TRUST_STORES` 环境变量到一个逗号分隔的 list。有这些选项:"system","java" 和 "nss"(包括了 Firefox)。  | 
 | 140 | +
  | 
 | 141 | +## 高级 topics  | 
 | 142 | +
  | 
 | 143 | +---  | 
 | 144 | +
  | 
 | 145 | +### 高级选项  | 
 | 146 | +
  | 
 | 147 | +```zsh  | 
 | 148 | +    -cert-file FILE, -key-file FILE, -p12-file FILE  | 
 | 149 | +        自定义输出路径.  | 
 | 150 | +
  | 
 | 151 | +    -client  | 
 | 152 | +        生成供客户端认证使用的证书.  | 
 | 153 | +
  | 
 | 154 | +    -ecdsa  | 
 | 155 | +        生成使用一个 ECDSA (一种椭圆曲线签名算法)key 来生成证书.  | 
 | 156 | +
  | 
 | 157 | +    -pkcs12  | 
 | 158 | +        生成一个 ".p12" PKCS #12 文件,也可以被识别为 ".pfx" 文件,  | 
 | 159 | +        包含 cert 和 key for legacy applications.  | 
 | 160 | +
  | 
 | 161 | +    -csr CSR  | 
 | 162 | +        生成一个给予 CSR(证书签名申请) 的证书。  | 
 | 163 | +    与除了 -install 和 -cert-file 以外的其它所以 flag 和参数冲突!  | 
 | 164 | +```  | 
 | 165 | +
  | 
 | 166 | +[SSL 证书 什么是CSR?-常见问题-文档中心-腾讯云](https://cloud.tencent.com/document/product/400/5367)  | 
 | 167 | +
  | 
 | 168 | +> **请注意!** 你必须把这些选项放在域名列表之前。  | 
 | 169 | +
  | 
 | 170 | +### 例如  | 
 | 171 | +
  | 
 | 172 | +```zsh  | 
 | 173 | +mkcert -key-file key.pem -cert-file cert.pem example.com *.example.com  | 
 | 174 | +```  | 
 | 175 | +
  | 
 | 176 | +### S/MIME (邮件安全证书)  | 
 | 177 | +
  | 
 | 178 | +用下面这种方式 `mkcert` 会生成一个 S/MIME 证书:  | 
 | 179 | +
  | 
 | 180 | +```zsh  | 
 | 181 | +mkcert filippo@example.com  | 
 | 182 | +```  | 
 | 183 | +
  | 
 | 184 | +### 移动设备  | 
 | 185 | +
  | 
 | 186 | +对于要让移动设备信任证书的情况,你得安装 root CA。就是 `rootCA.pem` 这个文件,可以通过 `mkcert -CAROOT` 打印出这个文件所在的目录。  | 
 | 187 | +
  | 
 | 188 | +在 iOS 上,你也可以使用 AirDrop,把 CA 邮件发给你自己,或者通过一个 HTTP server 提供它。在打开它之后,你需要  [install the profile in Settings > Profile Downloaded](https://github.com/FiloSottile/mkcert/issues/233#issuecomment-690110809) and then [enable full trust in it](https://support.apple.com/en-nz/HT204477) 。  | 
 | 189 | +
  | 
 | 190 | +对于 Android ,你得安装这个 CA 然后在应用程序的开发版本中启用 user roots。可以看一看这个 [StackOverflow 回答](https://stackoverflow.com/a/22040887/749014) 。  | 
 | 191 | +
  | 
 | 192 | +### 用 Node.js 来使用这个 root  | 
 | 193 | +
  | 
 | 194 | +Node 不使用 system root store,所以它不会自动接受 `mkcert` 证书。相反,你得设置 [`NODE_EXTRA_CA_CERTS`](https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file) 环境变量。  | 
 | 195 | +
  | 
 | 196 | +```zsh  | 
 | 197 | +export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"  | 
 | 198 | +```  | 
 | 199 | +
  | 
 | 200 | +### 改变 CA 文件的位置  | 
 | 201 | +
  | 
 | 202 | +CA 证书和它的 key 被存储在用户家目录的一个文件夹中。一般来说你不会想去关注它的位置,因为它会被自动装载。但是你可以通过 `mkcert -CAROOT` 来打印这个目录位置。  | 
 | 203 | +
  | 
 | 204 | +如果你想要管理单独的 CA 们,你可以使用 `\$CAROOT` 环境变量来设置 mkcert 放置和寻找 CA files 的路径。  | 
 | 205 | +
  | 
 | 206 | +### 在其它系统上安装 CA  | 
 | 207 | +
  | 
 | 208 | +安装 trust store 不需要 CA key(只要 CA),所以你可以导出 CA,并且使用 `mkcert` 来安装到其它机器上。  | 
 | 209 | +
  | 
 | 210 | +- 找到 `rootCA.pem` 文件,可以用 `mkcert -CAROOT` 找到对应目录。  | 
 | 211 | +
  | 
 | 212 | +- 把它 copy 到别的机器上。  | 
 | 213 | +
  | 
 | 214 | +- 设置 `\$CAROOT` 为 `rootCA.pem` 所在目录。  | 
 | 215 | +
  | 
 | 216 | +- 运行 `mkcert -install`(arch linux 可以 `sudo trust anchor --store rootCA.pem`,其它发行版可以用自带的命令手动添加来信任 CA)  | 
 | 217 | +
  | 
 | 218 | +请千万记住 `mkcert` 是用于开发目的的,不建议用于生产,所以它不应该被用到用户终端上,并且你不应该导出或者共享 `rootCA-key.pem` 。  | 
0 commit comments