mkcert
用来生成自签证书的工具
示例
mkcert
是 GO 编写的,一个简单的零配置的用来生成自签证书的工具。
下面给一个简单的示例,在本地生成自签证书,并使用让 nc 使用生成的证书。
1 | ~ ········································································································································· 10:46:25 |
mkcert
自动生成并安装一个本地 CA 到 root stores,并且生成 locally-trusted 证书。mkcert
不会自动使用证书来配置服务器,不过,这取决于你。
安装
Warning:
mkcert
自动生成的rootCA-key.pem
文件提供了完整的能力来拦截你机器上的安全请求。请不要分享它。
macOS
1 | $ brew install mkcert |
Linux
在 Linux 上,首先要安装 certutil
1 | $ sudo apt install libnss3-tools |
然后可以使用 Homebrew on Linux 来安装。
1 | $ brew install mkcert |
或者从源码构建(要求 Go 1.13+)
1 | git clone https://github.com/FiloSottile/mkcert && cd mkcert |
又或者使用 预构建的二进制文件。
1 | $ curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64" |
对于 Arch Linux 用户(比如我),mkcert
在 Arch Linux 官方仓库中可用。
1 | $ sudo pacman -S mkcert |
Windows
使用 Chocolatey
1 | $ choco install mkcert |
或者使用 Scoop
1 | $ scoop bucket add extras |
或者从源码构建(要求 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 |
请注意! 你必须把这些选项放在域名列表之前。
例如
1 | mkcert -key-file key.pem -cert-file cert.pem example.com *.example.com |
S/MIME (邮件安全证书)
用下面这种方式 mkcert
会生成一个 S/MIME 证书:
1 | mkcert 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
环境变量。
1 | export 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
。