在做程序开发的时候,免不了要接触https加密通信,你可能需要自己生成证书,虽然可以使用 openssl 完成这个工作,但是openssl是一个庞大和复杂的工具,有着令人眼花缭乱的参数,如果你没有太多的密码学知识,只是为了在本机生成一个自签名证书,方便自己开发和测试,那么可以试一试这个用Go语言写的命令行工具:mkcert,非常简单易用。

mkcert的Github地址:https://github.com/FiloSottile/mkcert,该项目有18000多颗星,作者Filippo Valsorda在2018年加入了Go的开发团队。关于mkcert,作者给出的一句话介绍:

mkcert is a simple tool for making locally-trusted development certificates. It requires no configuration.

作者提供了编译好的二进制程序,包含Linux/Windows/macOS三个版本,可直接下载使用:https://github.com/FiloSottile/mkcert/releases。你也可以使用brew安装,或者通过源码编译,具体详见作者在Github上面的说明。

下面,我以 Ubuntu linux 为例,介绍一下mkcert 1.4.3的使用方式:

  1. 将mkcert下载以后,放到一个合适的地方,并添加执行权限:

    1. curl -oL /usr/local/bin/mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64
    2. chmod u+x /usr/local/bin/mkcert
  2. 在linux下,mkcert依赖certutil,如果没有安装certutil,可以使用下面的命令安装:

    1. sudo apt install -y libnss3-tools
  3. 生成CA(certificate authority,即证书颁发机构),运行下面的命令可以在 ~/.local/share/mkcert/ 生成 rootCA.pem 和rootCA-key.pem两个文件,这个命令只需运行一次,因为生成的CA可以反复使用;

    1. mkcert -install
  4. 创建自签名证书,例如要为域名:lwm.icu 和IP:127.0.0.1 创建证书,可以使用如下的命令:

    1. mkcert lwma.icu 127.0.0.1
  5. 上述命令会自动使用第3步创建的CA生成证书文件,其中xxx.pem为证书,xxx-key.pem为私钥,你也可以使用-cert-file和-key-file两个参数设置生成文件的文件名。

生成了证书和私钥以后,就可以在web服务器开启https了。
接下来,可以打开浏览器测试一下了:
image.png

从上图可以看到,chrome浏览器地址栏中显示了一把小锁,表示是安全的连接。如果把地址修改成 https://127.0.0.2,浏览器就会提示为不安全的连接,这是因为刚才使用mkcert创建证书的时侯,并没有设置127.0.0.2这个地址。
image.png

推荐阅读

SSL - 安全套接字协议
使用mkcert创建自签名证书 - My Candy