myfreax

如何使用mkcert创建SSL证书

您是否厌倦了在本地开发项目中使用不受信任的SSL证书

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

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

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

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

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

例如,我们开发站点的Service worker时就需要使用本地的可信证书进行测试,当初就找到mkcert这个软件,感谢Filippo Valsorda编写的软件。

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

安装 mkcert

如果要在基于Debian的Linux发行版,例如Ubuntu,Linux mint等发行版安装mkcert,请运行命令sudo apt install wget libnss3-tools安装依赖软件certutil

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

安装完成后,下载mkcert从Github仓库中的发行页面。在下载之前请先检查mkcert发布页面获取最新版本。

在撰写本文时,最新版本是v1.3.0。我们将使用wget命令下载mkcert二进制文件到当前目录。

然后运行命令sudo mv mkcert /usr/local/bin移动mkcert二进制文件到/usr/local/bin目录。

这样就可以不使用相对路径或者绝对路径运行mkcert命令。最后运行chmod命令chmod +x  mkcert为mkcert二进制文件添加可执行权限。

sudo apt-get update
sudo apt install wget libnss3-tools
sudo yum install nss-tools -y #for centos Fedora Redhat


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

mkcert 创建SSL证书

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

在创建本地可信证书之前,您需要运行命令mkcert -install在本地安装CA根证书系统。

当安装CA后mkcert将会提示你Created a new local CA at "/home/myfreax/.local/share/mkcert",此时CA已经安装你在家目录中 。

完成后,开始为您的域名生成SSL证书。例如,我们使用mkcert为域名dev.myfreax.com创建本地可信SSL证书。

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

example.org-key.pem文件是SSL证书的Key,可通过Nginx的ssl_certificate_key指令指定。

example.org.pem文件是SSL证书,可通过Nginx的ssl_certificate指令指定。

mkcert -install
mkcert dev.myfreax.com

配置 Nginx SSL证书

现在让我们使用一个简单的Nginx配置文件测试mkcert创建的SSL证书。首先你需要编辑Linux hosts文件,添加域名与IP的映射记录。

你可运行命令echo "127.0.0.1 dev.myfreax.com" | sudo tee -a /etc/hosts直接追加一条DNS记录/etc/hosts文件。

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

server {
    listen       80;
    server_name  dev.myfreax.com;
    root /usr/share/nginx/html;
    index index.html;
}

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