HTTPS目前几乎是一个网站的标配,但是在本地做开发测试时,想使用HTTPS就比较麻烦。

比如最近做的一个项目,因为要使用到QQ开放平台的登录功能,因为平台限制,登录后的回调地址是强校验的,如果申请时填写了HTTPS的地址,而本地使用HTTP,那么就会报错。为了解决这个问题,就想找个工具,能生成本地的HTTPS证书,发现了一个小工具mkcert,非常好用。

mkcert

mkcert地址: https://github.com/FiloSottile/mkcert

mkcert是由谷歌的Filippo Valsorda使用Golang开发的一个开源工具,使用非常简单,不需要进行任何配置,就可以生成任何你喜欢的域名的本地可信赖的开发证书。

安装

MacOS

Mac上面我们可以使用Homebrew来进行安装:

1
2
brew install mkcert
brew install nss # 如果你使用Firefox的话

或者使用MacPorts:

1
2
3
sudo port selfupdate
sudo port install mkcert
sudo port install nss # 如果你使用Firefox的话

Linux

在Linux上面,首先需要安装certutil

1
2
3
4
5
6
7
sudo apt install libnss3-tools
    -or-
sudo yum install nss-tools
    -or-
sudo pacman -S nss
    -or-
sudo zypper install mozilla-nss-tools

然后你可以使用Linuxbrew来安装:

1
brew install mkcert

你也可以直接从源代码进行编译(依赖Go 1.10+)

1
2
go get -u github.com/FiloSottile/mkcert
$(go env GOPATH)/bin/mkcert

你也可以直接使用编译好的二进制文件

如果你使用的是Arch Linux:

1
2
3
git clone https://aur.archlinux.org/mkcert.git
cd mkcert
makepkg -si

Windows

在Windows上面,你可以使用Chocolatey来进行安装:

1
choco install mkcert

你也可以使用Scoop来进行安装:

1
2
scoop bucket add extras
scoop install mkcert

或者直接编译源代码(依赖Go 1.10+),也可以使用提前编译好的二进制文件

使用

首先,我们要创建并安装一个本地的CA证书。

1
2
3
4
5
$ mkcert -install
Created a new local CA at "/Users/wangjunfeng/Library/Application Support/mkcert" 💥
Password:
The local CA is now installed in the system trust store! ⚡️
The local CA is now installed in the Firefox trust store (requires browser restart)! 🦊

然后我们就可以直接生成我们自己的证书了,比如我们要生成example.com,*.example.com,example.test,localhost,127.0.0.1,::1这几个地址的证书,那么使用mkcert直接跟上这些地址就可以了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1
Using the local CA at "/Users/wangjunfeng/Library/Application Support/mkcert" ✨

Created a new certificate valid for the following names 📜
 - "example.com"
 - "*.example.com"
 - "example.test"
 - "localhost"
 - "127.0.0.1"
 - "::1"

Reminder: X.509 wildcards only go one level deep, so this won't match a.b.example.com ℹ️

The certificate is at "./example.com+5.pem" and the key at "./example.com+5-key.pem" ✅

剩下的,我们直接在nginx或者其他程序内配置使用这个生成的证书就可以了,真的是太简单,太好用了。

高级使用方法

高级参数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
-cert-file FILE, -key-file FILE, -p12-file FILE
	    Customize the output paths.

	-client
	    Generate a certificate for client authentication.

	-ecdsa
	    Generate a certificate with an ECDSA key.

	-pkcs12
	    Generate a ".p12" PKCS #12 file, also know as a ".pfx" file,
	    containing certificate and key for legacy applications.

	-csr CSR
	    Generate a certificate based on the supplied CSR. Conflicts with
	    all other flags and arguments except -install and -cert-file.

S/MIME

如果你想要生成一个S/MIME邮件证书,那么直接在生成证书的时候名字写成你的邮箱就可以了。

1
mkcert filippo@example.com

移动设备

如果你想让你的证书在移动设备上面受信任,那么就必须安装rootCA。你可以使用mkcert -CAROOT来生成一个rootCA.pem的文件。

在iOS设备上,你可以使用AirDrop、邮件将CA发送给自己,也可以放在http服务器上。安装后,你必须先设置信任该证书。

对于安卓设备,同样你必须安装这个rootCA,并启用它。

其他更多高级用法,可以直接在Github上面查看。