配置Nginx使用内部自签名SSL证书需三步:生成本地CA及服务器证书、严格存放并设限权限、在server块中启用HTTPS并指定证书路径;适用于内网、测试或DevOps环境。

配置 Nginx 使用内部自签名 SSL 证书,核心是三步:生成可信的私钥与证书、正确放置并设限权限、在 server 块中启用 HTTPS 并指向对应文件。整个过程不依赖外部 CA,适合内网服务、测试环境或 DevOps 内部平台。
生成自签名证书(推荐模拟 CA 方式)
直接用 openssl req -x509 生成单证书虽快,但浏览器仍会提示“不安全”。更稳妥的做法是先建一个本地 CA,再用它签发服务器证书——这样后续可批量信任,也便于管理。
- 创建 CA 私钥和根证书(有效期建议 10 年,避免频繁更新):
openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -subj "/C=CN/ST=Beijing/L=Beijing/O=MyInternalCA" -keyout ca.key -out ca.crt - 生成服务器私钥:
openssl genrsa -out server.key 2048 - 生成证书签名请求(CSR),注意
Common Name必须填你实际访问的域名(如intranet.local或 IP):openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=MyApp/CN=intranet.local" - 用本地 CA 签发服务器证书:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 -sha256
存放证书并设置严格权限
证书文件必须由 Nginx 主进程可读,但不能被普通用户随意查看。推荐统一放在 /usr/local/nginx/pki/ 或 /etc/nginx/ssl/,并限制权限。
- 新建目录并赋权:
sudo mkdir -p /etc/nginx/ssl && sudo chown root:root /etc/nginx/ssl && sudo chmod 700 /etc/nginx/ssl - 复制证书和私钥:
sudo cp server.crt server.key ca.crt /etc/nginx/ssl/ - 设置私钥仅 root 可读:
sudo chmod 600 /etc/nginx/ssl/server.key - 证书文件可设为 644:
sudo chmod 644 /etc/nginx/ssl/server.crt /etc/nginx/ssl/ca.crt
Nginx 配置 HTTPS server 块
编辑站点配置(如 /usr/local/nginx/conf/conf.d/intranet.conf),启用 SSL 并加载证书链。
- 监听 443 端口,开启 SSL 和 HTTP/2:
listen 443 ssl http2; - 指定证书与私钥路径:
ssl_certificate /etc/nginx/ssl/server.crt;ssl_certificate_key /etc/nginx/ssl/server.key; - 附带中间证书(即 CA 根证书),让客户端能验证信任链:
ssl_trusted_certificate /etc/nginx/ssl/ca.crt; - 启用现代加密套件与 HSTS(可选但推荐):
ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
让浏览器信任你的 CA(客户端侧)
自签名证书本身不会被系统默认信任,需手动将 ca.crt 安装为受信任的根证书:
- Linux(Chrome/Firefox):将
ca.crt复制到/usr/local/share/ca-certificates/,运行sudo update-ca-certificates - macOS:双击
ca.crt→ “钥匙串访问” → 拖入“系统”钥匙串 → 右键证书 → “显示简介” → 展开“信任” → 设为“始终信任” - Windows:右键
ca.crt→ “安装证书” → 选择“本地计算机” → 存储位置选“受信任的根证书颁发机构”
完成上述步骤后,用 intranet.local 访问时就不会再出现红色警告页了。


















