在本地开发环境中,通常使用自签名证书来启用 HTTPS。然而,自签名证书默认情况下会被浏览器标记为不安全,因为它们不是由受信任的证书颁发机构(CA)颁发的。mkcert解决了这个问题,它可以生成在本地完全受信任的证书,就像由正规 CA 颁发的一样。 mkcert是一个开源的用于创建本地可信开发证书的工具,Github地址为:https://github.com/FiloSottile/mkcert,它具有易于使用、跨平台、安全可靠等特点。下面介绍如何使用mkcert申请localhost证书。
一、安装 mkcert
1. 安装依赖(仅适用于部分系统)
- macOS:如果安装过程中提示 x509: certificate signed by unknown authority 错误,可能需要先安装 Homebrew 的 ca-certificates 包:
brew install curl && brew install openssl && brew install ca-certificates
- Linux(以 Ubuntu 为例):如果提示缺少依赖,可以安装以下软件包:
sudo apt-get install libnss3-tools
2. 安装 mkcert
- macOS(使用 Homebrew):
brew install mkcert
Windows(使用 Scoop):
scoop install mkcert
Linux:可以从发布页面下载预编译的二进制文件或通过源码安装。例如,从发布页面下载适用于 Linux 的二进制文件后,将其移动到 /usr/local/bin/ 目录下,并赋予执行权限:
wget "https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64"
sudo mv mkcert-v1.4.4-linux-amd64 /usr/local/bin/mkcert
sudo chmod +x /usr/local/bin/mkcert
二、生成证书
为 localhost 生成证书:
mkcert -install
mkcert localhost 127.0.0.1 ::1
mkcert -install 命令用于将 mkcert 生成的根证书安装到当前系统的信任存储中,这样生成的证书才会被系统信任。
mkcert localhost 127.0.0.1 ::1 命令用于为 localhost、127.0.0.1 和 ::1(IPv6 的本地回环地址)生成证书。
生成的证书文件包括 localhost.pem(证书文件)和 localhost-key.pem(私钥文件)。
三、在不同环境中使用证书
1. Node.js(使用 Express 框架示例)
const express = require('express');
const fs = require('fs');
const https = require('https');
const app = express();
const options = {
key: fs.readFileSync('localhost-key.pem'),
cert: fs.readFileSync('localhost.pem'),
};
https.createServer(options, app).listen(3000, () => {
console.log('HTTPS server running on port 3000');
});
2. Nginx
修改 Nginx 配置文件(通常位于 /etc/nginx/sites-available/default 或类似位置),添加以下内容:
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /path/to/localhost.pem;
ssl_certificate_key /path/to/localhost-key.pem;
location / {
# 你的应用程序的处理逻辑
}
}
重新加载 Nginx 配置:
sudo service nginx reload
3. Apache
修改 Apache 配置文件(通常位于 /etc/apache2/sites-available/000-default.conf 或类似位置),添加以下内容:
<VirtualHost *:443>
ServerName localhost
SSLEngine on
SSLCertificateFile /path/to/localhost.pem
SSLCertificateKeyFile /path/to/localhost-key.pem
# 你的应用程序的处理逻辑
</VirtualHost>
重新加载 Apache 配置:
sudo service apache2 reload
通过以上步骤,就可以使用 mkcert 为 localhost 创建证书,并在不同的开发环境中使用这些证书来启用 HTTPS。这样可以在本地开发过程中模拟真实的 HTTPS 环境,确保开发的应用程序在安全连接方面的功能正常。