您是否厌倦了在本地开发项目中使用不受信任的SSL证书?维护自己的证书颁发机构(CA)是一个痛苦的事情,这过程中需要用到神秘的程序和命令。在本指南中,我将向您展示一种在没有CA的情况下在本地开发计算机上使用受信任SSL证书的简单方法。

mkcert是一个简单的零配置工具,由Filippo Valsorda使用Go编写,用于制作具有您喜欢的任何名称的本地可信开发证书,无需任何配置。这将对您有所帮助,因为无法从可信证书颁发机构获取没有有效DNS记录的本地名称的证书。让我们深入研究安装和使用mkcert。

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

如何在Ubuntu/Debian上安装mkcert

要在任何Ubuntu或Debian系统上安装mkcert,首先要安装certutil依赖项:

sudo apt-get update
sudo apt install wget libnss3-tools

安装完成后,下载 mkcert来自Github的二进制包。检查  mkcert发布页面以获取最新版本。在撰写本文时,最新版本是。v1.3.0

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

下载文件后,使文件可执行并将二进制文件放在 /usr/loa/bin

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

如何在CentOS/Fedora上安装mkcert

在CentOS和Fedora上安装mkcert类似于Ubuntu / Debian安装。您只需要先安装nss-tools工具。

sudo yum安装nss-tools

sudo yum install nss-tools

安装完成后,下载mkcert二进制包,就像安装Ubuntu一样。

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

下载文件后,使文件可执行并将二进制文件放在下面 /usr/loa/bin

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

如何在Arch Linux上安装mkcert

对于Arch Linux,您可以使用上述过程或使用AUR安装mkcert。对于安装,你需要使用AUR助手,推荐yay。yay是Arch Linux/Manjaro的最佳AUR助手

安装yay后,使用以下命令安装mkcert:

yay -S --noconfirm --needed go
yay -S --noconfirm --needed mkcert

如何在macOS上安装mkcert

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

brew install mkcert
brew install nss # if you use Firefox

对于二进制安装:

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

下载文件后,使文件可执行并将二进制文件放在下面 /usr/local/bin

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

如何使用mkcert生成本地受信任的SSL证书

mkcert支持以下根存储:

  • macOS system store
  • Windows system store
  • update-ca-trust (Fedora,RHEL,CentOS)或
  • update-ca-certificates (Ubuntu,Debian)
  • Firefox(仅限macOS和Linux)
  • Chrome and Chromium
  • Java(  JAVA_HOME

要获取mkcert的帮助页面,请传递该选项--help

Usage of mkcert:

$ mkcert -install
Install the local CA in the system trust store.

$ mkcert example.org
Generate "example.org.pem" and "example.org-key.pem".

$ mkcert example.com myapp.dev localhost 127.0.0.1 ::1
Generate "example.com+4.pem" and "example.com+4-key.pem".

$ mkcert '*.example.com'
Generate "_wildcard.example.com.pem" and "_wildcard.example.com-key.pem".

$ mkcert -pkcs12 example.com
Generate "example.com.p12" instead of a PEM file.

$ mkcert -uninstall
Uninstall the local CA (but do not delete it).

Change the CA certificate and key storage location by setting $CAROOT,
print it with "mkcert -CAROOT".

您需要首先在系统信任库中安装本地CA.

mkcert -install
Created a new local CA at "/home/myfreax/.local/share/mkcert" ?
The local CA is now installed in the system trust store! ⚡️

完成后,您可以开始为您的域生成SSL证书。例如,我将生成一个对以下名称有效的新证书:

"mydomain.com"
"*.mydomain.co"
"myapp.net"
"localhost"
"127.0.0.1"
"::1"

使用如下命令:

mkcert mydomain.com '*.mydomain.co' myapp.net localhost 127.0.0.1 ::1

输出内容如下

Using the local CA at "/root/.local/share/mkcert" ✨

Created a new certificate valid for the following names ?
- "mydomain.com"
- "*.mydomain.co"
- "myapp.net"
- "localhost"
- "127.0.0.1"
- "::1"
The certificate is at "./mydomain.com+5.pem" and the key at "./mydomain.com+5-key.pem" ✅

您也可以查看证书的内容:

cat ./mydomain.com+5.pem

测试mkcert证书

现在让我们使用一个简单的Nginx配置文件测试mkcert证书。这个例子是在Ubuntu 16.04系统上完成的。

sudo apt-get install nginx

创建一个简单的网页

# cat /etc/nginx/conf.d/test.conf 
server {
   listen 80;
   server_name mydomain.com myapp.net;
   root /var/www/test;
}

server {
   listen *:443 ssl http2;
   root /var/www/test;
   server_name mydomain.com myapp.net;
   ssl_certificate /home/jmutai/mydomain.com+5.pem; 
   ssl_certificate_key /home/jmutai/mydomain.com+5-key.pem;
}

确保您的/etc/hosts文件包含已使用域的记录。

127.0.0.1 myapp.net
127.0.0.1 mydomain.com

打开浏览器并使用提供的域名,你应该得到一个绿色栏。如果你喜欢我们的内容可以选择在下方二维码中捐赠我们,或者点击广告予以支持,感谢你的支持

如果你喜欢我们的内容可以选择在下方二维码中捐赠我们,或者点击广告予以支持,感谢你的支持