You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:37:33