1. 安装安全的Java版本
首选是通过Ubuntu官方软件源来安装经过安全验证的OpenJDK,例如OpenJDK 11及以上版本。切勿贪图方便使用过时或来源不明的第三方Java包。安装命令简洁明了:

sudo apt update && sudo apt install openjdk-11-jdk# 安装OpenJDK 11
安装完成后,务必使用java -version和javac -version验证是否成功,这一步不可跳过。
2. 配置Java安全策略文件
Java的安全策略文件(java.security)决定了默认权限控制、加密算法等核心安全参数。其位置通常在/etc/java-,以Java 11为例为/etc/java-11-openjdk-amd64/security/java.security。需要调整的关键配置项如下:
- 禁用弱加密算法:找到文件中的
jdk.certpath.disabledAlgorithms参数,将所有不安全的算法加入黑名单。例如MD2、MD5以及RSA密钥长度小于1024位的都应禁用:
jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, DSA keySize < 1024
- 限制代码权限:如需更细粒度的控制,可创建自定义策略文件(例如
/path/to/myapp.policy)。示例如下:
grant codeBase "file:/path/to/your/app/-" {permission java.security.AllPermission;# 根据实际需求缩小权限范围(如仅允许读写特定目录)};
启动Java应用时,通过-Djava.security.policy参数指定该文件:
java -Djava.security.policy=/path/to/myapp.policy -jar your-application.jar
3. 强化系统与应用层安全配置
Java自身安全固然重要,但操作系统的安全配置才是根基。以下几步缺一不可:
- 配置防火墙:使用
ufw限制外部访问,仅开放必要端口。比如SSH的22端口以及应用所需的8080端口:
sudo ufw allow 22/tcp# 允许SSHsudo ufw allow 8080/tcp# 允许应用层端口sudo ufw enable# 启用防火墙
- 禁用SSH root登录:编辑
/etc/ssh/sshd_config文件,设置以下两项:
PermitRootLogin no# 禁止root直接登录PasswordAuthentication no# 禁用密码认证(推荐使用SSH密钥对)
修改后重启SSH服务:sudo systemctl restart sshd。
- 使用强密码策略:通过
pam_cracklib模块强制要求复杂密码(需包含大小写字母、数字、特殊字符,长度至少10位)。编辑/etc/pam.d/common-password文件,添加:
password required pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=10
4. 管理密钥与证书
利用JDK自带的keytool管理Java密钥库(Keystore),确保证书与私钥安全无误。常用操作:
- 查看密钥库条目:
keytool -list -v -keystore /path/to/your/keystore.jks# 替换为实际密钥库路径
- 生成密钥对:如需使用SSL/TLS加密,可采用以下命令生成密钥对及自签名证书(建议密钥长度不低于2048位):
keytool -genkeypair -alias mydomain -keyalg RSA -keystore keystore.jks -keysize 2048# 密钥长度建议≥2048位
密钥库密码务必妥善保管,切勿泄露。
5. 更新与补丁管理
定期更新Java运行环境及系统软件包,及时修复已知安全漏洞:
sudo apt update && sudo apt upgrade# 更新系统及Java包
强烈建议开启自动安全更新:
sudo apt install unattended-upgradessudo dpkg-reconfigure --priority=low unattended-upgrades
6. 日志监控与审计
日志是发现异常的第一道防线。Java应用和系统都应开启日志记录并定期审查。具体操作:
- 查看Java应用日志:若使用Tomcat等服务器,可查看
catalina.out或localhost.;.log - 监控系统日志:通过
journalctl查看认证失败、未授权访问等记录:
journalctl -u sshd --since "1 hour ago"# 查看SSH最近1小时的日志
- 集中日志管理:推荐使用ELK Stack或Graylog将日志集中管理,便于快速定位安全事件。
7. 遵循安全编码实践
开发Java应用时,这些安全规范必须牢记:
- 输入验证:对所有用户输入严格检查格式,例如使用正则表达式过滤SQL注入与XSS攻击;
- 输出编码:输出到网页或文件的内容需进行HTML/JavaScript编码,推荐使用OWASP ESAPI库;
- 最小权限原则:应用仅申请真正需要的权限,如数据库访问、文件系统权限;
- 错误处理:切勿将堆栈跟踪等敏感信息暴露给用户,应用自定义错误页面替代默认错误信息。
