Ubuntu服务器NodeStatic应用SSL证书安全存储及服务器加固咨询
关于NodeStatic应用SSL证书安全存储及新服务器安全配置的问题
我在Ubuntu服务器上部署了一个NodeStatic应用,已有域名指向该服务器。现需添加SSL证书,代码如下:
var fs = require('fs'); var options = { key: fs.readFileSync('ssl/privatekey.pem').toString(), cert: fs.readFileSync('ssl/certificate.pem').toString() }; var fileServer = new(nodeStatic.Server)(); var app = http.createServer(options, function(req, res) { fileServer.serve(req, res); }).listen(80);但证书存放在应用目录下似乎不安全,当前应用目录为
/var/www/myapp,用户可通过example.com/ssl/privatekey.pem在浏览器中查看证书内容。请问SSL证书安全存储的最佳实践是什么?将证书放在index.js同级目录或更上层目录是否安全?附加问题:这是一台全新服务器,需配置哪些内容保障安全?
SSL证书安全存储的最佳实践
首先得明确你当前的核心问题:NodeStatic作为静态文件服务器,会把/var/www/myapp下的所有文件都当作可公开访问的静态资源,所以不管你把证书放在子目录还是同级目录,只要在这个范围里,用户都能直接通过URL访问到私钥,这绝对是高危风险。
针对这个问题,给你几个生产环境通用的最佳实践:
- 彻底移出静态服务目录:绝对不要把证书放在NodeStatic的服务根目录(
/var/www/myapp)或其子目录下。推荐把证书存放在系统级的专用目录,比如:/etc/ssl/private/:这个目录是Ubuntu默认的私钥存储目录,默认权限是700,只有root用户能访问,安全性极高- 或者自己创建一个
/opt/ssl-certs/目录,专门用来存放证书
- 严格设置文件权限:
- 公钥证书(
certificate.pem)可以设置为644(所有者读写,组和其他用户只读),因为公钥本来就是公开的 - 私钥文件(
privatekey.pem)必须设置为600(只有所有者能读写,其他人完全无权访问),这是关键,绝对不能放宽权限 - 存放证书的目录权限设置为
700或750,确保只有授权用户能进入
- 公钥证书(
- 修改代码用绝对路径读取:把代码里的相对路径改成绝对路径,比如:
var options = { key: fs.readFileSync('/etc/ssl/private/privatekey.pem').toString(), cert: fs.readFileSync('/etc/ssl/certs/certificate.pem').toString() }; - 给Node应用用户授权读取权限:如果你的Node应用是用非root用户(比如
www-data)运行的,需要确保这个用户能读取证书文件。可以把用户加入到证书目录的用户组,或者临时调整文件的访问权限(但记住私钥权限必须保持600,只能给所有者加权限)
至于你问的“放在index.js同级目录或更上层目录是否安全”:
- 如果同级目录还是在
/var/www/myapp里,那依然不安全,用户可以直接访问example.com/privatekey.pem - 如果是更上层目录(比如
/var/www/),只要不在NodeStatic的服务范围内,那是安全的,但还是推荐用系统级的专用目录,更规范也更安全
全新Ubuntu服务器的安全配置要点
对于一台新服务器,这些配置是基础且必要的:
- 创建非root用户并禁用root远程登录:不要直接用root登录,创建一个带sudo权限的普通用户,然后修改
/etc/ssh/sshd_config,设置PermitRootLogin no,重启ssh服务(sudo systemctl restart sshd) - 配置UFW防火墙:Ubuntu默认的UFW防火墙简单易用,只开放必要的端口,拒绝其他所有入站流量:
sudo ufw allow 22/tcp # SSH端口 sudo ufw allow 80/tcp # HTTP端口 sudo ufw allow 443/tcp # HTTPS端口 sudo ufw enable - 启用自动安全更新:设置系统自动安装安全更新,避免遗漏补丁。可以安装
unattended-upgrades包来配置自动更新 - 安装fail2ban:防止SSH暴力破解,它会监控登录日志,多次失败登录后自动封禁IP,安装命令:
sudo apt install fail2ban,安装后默认配置就够用 - 强制使用密钥登录SSH:禁用密码登录,只允许SSH密钥登录,修改
/etc/ssh/sshd_config,设置PasswordAuthentication no和PubkeyAuthentication yes,重启ssh服务 - 配置SSL证书自动续期:如果用Let's Encrypt证书,用Certbot安装并设置自动续期,确保证书不会过期
- 监控系统日志:定期查看
/var/log/auth.log(SSH登录日志)、/var/log/syslog等,或者安装日志监控工具,及时发现异常活动
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

