在macos上配置本地开发自签名证书链需三步:1.生成并信任根ca证书;2.用配置文件签发含localhost、*.test等san的终端证书;3.合并证书链并在服务中正确加载,最后验证证书链完整性。
在 macos 上配置支持本地开发调试的自签名证书链,核心是让浏览器和系统信任你生成的根证书,并确保终端服务(如 nginx、webpack dev server、express 等)能正确加载带 san(subject alternative name)的证书,尤其是包含 localhost、127.0.0.1 和通配符子域名(如 *.test、*.local)。
生成可信的根证书与私钥
先创建一个长期有效的自签名根 CA,后续所有开发证书都由它签发,这样只需信任一次根证书即可:
- 执行命令生成 4096 位 RSA 私钥:
openssl genrsa -out root-ca.key 4096 - 用该私钥生成自签名根证书(有效期建议 10 年):
openssl req -x509 -new -nodes -key root-ca.key -sha256 -days 3650 -out root-ca.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=LocalDev/CN=Local Development Root CA" - 双击
root-ca.crt→ 用“钥匙串访问”导入到「系统」钥匙串 → 右键证书 → 「显示简介」→ 展开「信任」→ 将「使用此证书时」设为「始终信任」→ 关闭并输入密码确认
签发带完整 SAN 的终端证书
仅支持单域名的证书在现代开发中不够用。必须通过配置文件显式声明多个 DNS 名和 IP 地址:
- 新建
cert.conf文件,内容包含:[req]<br>default_bits = 4096<br>distinguished_name = req_distinguished_name<br>req_extensions = req_ext<br>x509_extensions = v3_ca<br><br>[req_distinguished_name]<br>C = CN<br>ST = Beijing<br>L = Beijing<br>O = LocalDev<br>CN = localhost<br><br>[req_ext]<br>subjectAltName = @alt_names<br><br>[v3_ca]<br>subjectAltName = @alt_names<br>basicConstraints = critical,CA:FALSE<br>keyUsage = critical,digitalSignature,keyEncipherment<br>extendedKeyUsage = serverAuth,clientAuth<br><br>[alt_names]<br>DNS.1 = localhost<br>DNS.2 = *.test<br>DNS.3 = *.local<br>IP.1 = 127.0.0.1<br>IP.2 = ::1
- 生成终端私钥与 CSR:
openssl req -new -keyout server.key -out server.csr -newkey rsa:4096 -nodes -sha256 -config cert.conf - 用根证书签发最终证书:
openssl x509 -req -in server.csr -CA root-ca.crt -CAkey root-ca.key -CAcreateserial -out server.crt -days 365 -sha256 -extfile cert.conf -extensions v3_ca
在服务中正确加载证书
证书链本身需包含服务器证书 + 中间证书(本例无中间层),但为兼容性建议合并为单一 PEM 文件:
- 将证书与私钥合并(部分工具如 Webpack Dev Server 要求单文件):
cat server.crt root-ca.crt > server-chain.crt - 启动服务时指定路径,例如:
Webpack Dev Server:https: { key: fs.readFileSync('server.key'), cert: fs.readFileSync('server-chain.crt') }
Nginx:ssl_certificate /path/to/server-chain.crt; ssl_certificate_key /path/to/server.key; - 确保服务监听
127.0.0.1或::1,而非0.0.0.0(避免被外网探测)
验证与调试技巧
配置完成后快速确认是否生效:
- 访问
https://localhost:3000,地址栏应显示锁图标且无警告;点击锁 → 「显示证书」→ 查看颁发者是否为「Local Development Root CA」 - 终端检查证书链完整性:
openssl s_client -connect localhost:3000 -servername localhost 2>/dev/null | openssl x509 -noout -text | grep -A1 "Subject Alternative Name"→ 应列出全部 DNS/IP 条目 - 若仍提示不安全,清空 Safari/Chrome 的证书缓存(Safari:偏好设置 → 隐私 → 「管理网站数据」→ 搜索 localhost 清除;Chrome:地址栏输入
chrome://restart并重启)











