在程序开发过程中,使用 HTTPS 加密通信至关重要。生成 SSL 证书对于保护敏感数据必不可少。而对于开发人员来说,openssl 工具可能过于复杂。本文介绍 mkcert,一种简单易用的 Go 语言命令行工具,可用于生成本地自签名 SSL 证书。
mkcert 简介
mkcert 是一款开源工具,用于生成本地的自签名 SSL 证书。它基于 Golang 开发,跨平台兼容,无需配置即可使用。mkcert 支持多域名,还可自动信任 CA。
安装
MacOS
brew install mkcert
brew install nss # Firefox 浏览器支持
Linux
安装 certutil:
sudo apt install libnss3-tools
sudo yum install nss-tools
sudo pacman -S nss
sudo zypper install mozilla-nss-tools
使用 Linuxbrew 安装 mkcert:
brew install mkcert
或从源代码构建:
git clone https://github.com/FiloSottile/mkcert
cd mkcert
go build -ldflags "-X main.Version=$(git describe --tags)"
Windows
choco install mkcert
验证版本
mkcert -version
创建本地 CA
要生成可信任的证书,需要创建一个本地 CA:
mkcert -install
为 localhost 生成证书:
mkcert localhost
此命令会在当前目录生成 localhost.pem 和 localhost-key.pem 两个文件。
复制并安装证书
复制 localhost.pem 并将其重命名为 localhost.crt,用于本地安装:
cp localhost.pem localhost.crt
安装证书:
单击 localhost.crt 文件并按照浏览器提示进行安装。
将证书移动到 Nginx 目录
将 localhost.pem 和 localhost-key.pem 文件移动到 Nginx 目录:
cd /usr/local/etc/nginx
mkdir ssl
cd ~
cp localhost.pem /usr/local/etc/nginx/ssl/localhost.pem
cp localhost-key.pem /usr/local/etc/nginx/ssl/localhost-key.pem
配置 Nginx
在 Nginx 配置文件中添加以下内容:
ssl_certificate /usr/local/etc/nginx/ssl/localhost.pem;
ssl_certificate_key /usr/local/etc/nginx/ssl/localhost-key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
重启 Nginx
su root
nginx -t && nginx -s reload
生成多域名证书
要为多个域名生成证书,请运行以下命令:
mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1
注意事项
**必须在客户端生成 SSL 证书。**切勿将从服务器生成的证书复制到客户端。
生成证书时 不要使用 sudo 权限,否则可能会导致证书颁发者无效的错误。