私钥安全核心是环境防护而非指令配置:必须存于/etc/nginx/ssl/或/etc/ssl/private/等Web不可达路径,设600权限且属主root,禁用密码保护,Nginx通过绝对路径引用,父目录同步收紧至700。

ssl_certificate_key 指向的是 Nginx 加载 TLS 私钥的路径,它本身不“挂载”,而是由 Nginx 主进程读取。真正需要做的是把私钥文件放在安全位置、设对权限、确保只有 root 可读,并让 Nginx 配置正确引用它。核心不是配置指令本身,而是私钥的生存环境是否牢靠。
私钥存放路径必须隔离且不可被 Web 访问
- 推荐目录:
/etc/nginx/ssl/或/etc/ssl/private/
这两个路径默认不在任何root、alias或location的 HTTP 映射范围内,避免通过 URL(如https://your.site/ssl/private.key)意外暴露。 - 绝对禁止放在这些目录中:
/var/www//usr/share/nginx/html/- 任何被
server块中root指令指向的路径下
- 验证方式:在浏览器中直接请求该私钥文件的 URL,应返回
403 Forbidden或404 Not Found,绝不能返回 200 + 文件内容
文件权限必须严格设为 600,属主为 root
- 私钥文件(如
/etc/nginx/ssl/example.com.key)必须满足:- 权限:
600(即-rw-------),其他用户和组无任何读写执行权限 - 属主:
root:root(Nginx 主进程以 root 身份启动,能读;工作进程无需直接读磁盘文件)
- 权限:
- 执行命令修正:
chmod 600 /etc/nginx/ssl/example.com.key chown root:root /etc/nginx/ssl/example.com.key
- 注意:不要用
umask 002创建文件,否则新生成的.key默认可能带 group 可读(如640),属于高危配置。
Nginx 配置中正确引用私钥路径
- 在
server块中明确指定:ssl_certificate_key /etc/nginx/ssl/example.com.key;
- 必须使用绝对路径,相对路径或符号链接容易引发权限绕过或加载失败。
- 不要给私钥加密码保护(即不要用
openssl rsa -aes256 -in key.pem -out key-decrypted.pem这类加密私钥)——Nginx 启动时无法自动输入密码,会导致服务无法 reload 或启动失败。
额外建议:父目录权限也要收紧
- 如果私钥放在
/etc/ssl/private/,请同时锁定该目录权限:chmod 700 /etc/ssl/private/ chown root:root /etc/ssl/private/
- 目录可执行(
x)是必须的(否则无法进入),但仅限 owner,组和其他人不能列目录内容或进入。
不复杂但容易忽略


















