私钥文件权限必须设为600且属主属组均为root,存放于/etc/nginx/ssl/等Web不可达路径,父目录权限同步设为700,禁用密码保护,Nginx通过绝对路径引用;宽松权限或Web可访问路径将导致私钥泄露风险。
私钥文件权限必须设为 600,属主属组均为 root,且存放路径必须确保 Web 服务无法通过 HTTP 访问——这是防止越权读取的最核心防线。
私钥(.key 文件)是 TLS 握手中最敏感的资产,任何非 root 用户可读都会导致身份冒用或流量解密:
sudo chmod 600 /etc/nginx/ssl/example.com.key
sudo chown root:root /etc/nginx/ssl/example.com.key
ls -l /etc/nginx/ssl/example.com.key 应显示 -rw-------,无 group 或 other 位权限Nginx 不会主动检查路径安全性,但操作系统和 URL 路由决定了风险是否真实存在:
/etc/nginx/ssl/ 或 /etc/ssl/private/(默认不被任何 root 或 alias 指令映射)/var/www/、/usr/share/nginx/html/、/home/xxx/、/tmp/ 等可能被 HTTP 请求解析到的位置https://your.site/ssl/example.com.key,必须返回 403 Forbidden 或 404 Not Found,绝不能返回私钥内容仅保护私钥文件本身不够,目录遍历权限同样关键:
sudo chmod 700 /etc/nginx/ssl/
sudo chown root:root /etc/nginx/ssl/
权限设置后,还需确保 Nginx 实际能加载,同时杜绝其他绕过风险:
ssl_certificate_key 必须使用绝对路径,例如:ssl_certificate_key /etc/nginx/ssl/example.com.key;
sudo setfacl -m u:www-data:r /etc/nginx/ssl/example.com.key,而非放宽全局权限不复杂但容易忽略