您是否厌倦了在本地开发项目中使用不受信任的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.pem
和example.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;
}
