如何使用mkcert创建SSL证书

您是否厌倦了在本地开发项目中使用不受信任的SSL证书?维护自己的证书颁发机构CA是一个痛苦的事情,这过程中需要用到神秘的程序和命令

4 min read
By myfreax
如何使用mkcert创建SSL证书

您是否厌倦了在本地开发项目中使用不受信任的SSL证书?维护自己的证书颁发机构CA是一个痛苦的事情,这过程中需要用到神秘的程序和命令。

在本教程中,我将向您展示一种在没有CA的情况下在本地开发计算机上创建受信任SSL证书的简单方法。

mkcert是一个简单的零配置工具,由Filippo Valsorda使用Go编写,用于制作本地浏览器可信HTTPS SSL证书,无需任何配置。

这将对您非常大的帮助,因为你无法从可信证书颁发机构获取有效DNS记录的本地名称的证书。让我们深入研究安装和使用mkcert。

线上可以使用免费证书,具体请参考教程使用Certbot为域名添加HTTPS SSL证书与自动续订

如果要在基于Debian的Linux发行版,例如Ubuntu,Linux mint等发行版上安装mkcert,请首先使用apt软件包管理器更新索引运行sudo apt-get update

然后安装certutil依赖软件,运行命令sudo apt install wget libnss3-tools

要在基于Redhat的Linux发行版,例如CentOS和Fedora等发行版安装mkcert。您需要先使用yum命令安装nss-tools工具。

安装完成后,下载mkcert从Github仓库中。请检查mkcert发布页面以获取最新版本。在撰写本文时,最新版本是v1.3.0使用wget命令下载mkcert二进制文件。

使用mv命令将mkcert二进制文件移动到/usr/local/bin目录 ,并使用chmod命令为mkcert可执行的二进制文件添加可执行权限。

export VER="v1.3.0" && wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/${VER}/mkcert-${VER}-linux-amd64

chmod +x  mkcert
sudo mv mkcert /usr/local/bin

对于macOS用户,您可以手动下载二进制安装mkcert或者从中brew安装mkcert。

brew install mkcert
brew install nss # if you use Firefox

SSL证书

mkcert支持macOS,Windows,Fedora,RHEL,CentOS的update-ca-trust,Ubuntu,Debian的update-ca-certificates。Firefox,Chrome and Chromium,Java等CA根证书系统。

您需要本地安装CA根证书系统运行命令mkcert -install。mkcert将会询问提示安装本地CA在家目录中Created a new local CA at "/home/myfreax/.local/share/mkcert" 。

完成后,您可以开始为您的域名生成SSL证书。例如,我们使用mkcert将创建对域名example.org有效的SSL证书。

mkcert example.org命令将会example.org创建本地浏览器受信任的证书。mkcert将会创建两个文件example.org-key.pemexample.org.pem在当前目录下。

example.org-key.pem文件是SSL证书的Key,可在Nginx的ssl_certificate_key指令使用。example.org.pem文件是SSL证书,在Nginx的ssl_certificate指令使用。

现在让我们使用一个简单的Nginx配置文件测试mkcert创建SSL证书。这个例子是在Ubuntu 20.04安装nginx完成的。

首先你需要编辑Linux hosts文件,添加域名与IP的映射记录。你可运行命令echo "127.0.0.1 example.org" | sudo tee -a  /etc/hosts直接追加一条DNS记录到Linux /etc/hosts文件。

然后创建以下Nginx配置文件,记录将nginx的配置包含到你Nginx的主配置文件。如果你不会配置Nginx。可以参考我们的教程如何在Ubuntu 20.04设置Nginx虚拟主机

server {
   listen 80;
   server_name example.org;
   root /var/www/test;
}

server {
   listen *:443 ssl http2;
   root /var/www/test;
   server_name example.org;
   ssl_certificate /home/myfreax/example.org.pem; 
   ssl_certificate_key /home/myfreax/example.org.pem;
}
如何使用Certbot为域名添加HTTPS SSL证书与自动续订 | myfreax
Certbot是一个易于使用的客户端,它由EFF,Mozilla和开源组织发起的Let’s Encrypt(一个开放的证书颁发机构)获取证书,并将其部署到Web服务器,在本教程中我们将讨论如何使用Certbot工具为自己的http服务,站点配置https的SSL证书