HTTPS目前几乎是一个网站的标配,但是在本地做开发测试时,想使用HTTPS就比较麻烦。
比如最近做的一个项目,因为要使用到QQ开放平台的登录功能,因为平台限制,登录后的回调地址是强校验的,如果申请时填写了HTTPS的地址,而本地使用HTTP,那么就会报错。为了解决这个问题,就想找个工具,能生成本地的HTTPS证书,发现了一个小工具mkcert,非常好用。
mkcert地址: https://github.com/FiloSottile/mkcert
mkcert是由谷歌的Filippo Valsorda使用Golang开发的一个开源工具,使用非常简单,不需要进行任何配置,就可以生成任何你喜欢的域名的本地可信赖的开发证书。
安装
MacOS
Mac上面我们可以使用Homebrew来进行安装:
brew install mkcert
brew install nss # 如果你使用Firefox的话
或者使用MacPorts:
sudo port selfupdate
sudo port install mkcert
sudo port install nss # 如果你使用Firefox的话
Linux
在Linux上面,首先需要安装certutil
。
sudo apt install libnss3-tools
-or-
sudo yum install nss-tools
-or-
sudo pacman -S nss
-or-
sudo zypper install mozilla-nss-tools
然后你可以使用Linuxbrew来安装:
brew install mkcert
你也可以直接从源代码进行编译(依赖Go 1.10+)
go get -u github.com/FiloSottile/mkcert
$(go env GOPATH)/bin/mkcert
你也可以直接使用编译好的二进制文件。
如果你使用的是Arch Linux:
git clone https://aur.archlinux.org/mkcert.git
cd mkcert
makepkg -si
Windows
在Windows上面,你可以使用Chocolatey来进行安装:
choco install mkcert
你也可以使用Scoop来进行安装:
scoop bucket add extras
scoop install mkcert
或者直接编译源代码(依赖Go 1.10+),也可以使用提前编译好的二进制文件。
使用
首先,我们要创建并安装一个本地的CA证书。
$ 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直接跟上这些地址就可以了。
$ 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或者其他程序内配置使用这个生成的证书就可以了,真的是太简单,太好用了。
高级使用方法
高级参数
-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邮件证书,那么直接在生成证书的时候名字写成你的邮箱就可以了。
mkcert filippo@example.com
移动设备
如果你想让你的证书在移动设备上面受信任,那么就必须安装rootCA。你可以使用mkcert -CAROOT
来生成一个rootCA.pem
的文件。
在iOS设备上,你可以使用AirDrop、邮件将CA发送给自己,也可以放在http服务器上。安装后,你必须先设置信任该证书。
对于安卓设备,同样你必须安装这个rootCA,并启用它。
其他更多高级用法,可以直接在Github上面查看。