xinli/项目介绍/安全配置修改说明.md

334 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 安全配置修改说明
**重要提醒:** 以下配置已使用新的默认值替换原有默认值,但在部署到生产环境前仍需根据实际情况进一步修改!
---
## ✅ 已修改的默认配置
### 1. JWT令牌密钥 ✅
**文件:** `ry-xinli-admin/src/main/resources/application.yml`
```yaml
token:
secret: YWFhMzlhOGEtYTdjYi00NTUzLWFhMDct # ✅ 已修改
```
**原值:** `abcdefghijklmnopqrstuvwxyz`
**新值:** `YWFhMzlhOGEtYTdjYi00NTUzLWFhMDct`
**状态:** ✅ 已使用随机值替换
> ⚠️ **生产环境建议:** 使用更长的随机字符串建议64位
**生成新密钥的方法:**
```bash
# 方法1使用OpenSSL
openssl rand -base64 48
# 方法2使用PowerShell
[Convert]::ToBase64String((1..48|%{Get-Random -Max 256}))
# 方法3在线生成
# 访问 https://www.random.org/strings/
```
---
### 2. 数据库密码 ✅
**文件:** `ry-news-admin/src/main/resources/application-druid.yml`
```yaml
master:
username: root
password: ddnai@2025#mysql # ✅ 已修改
```
**原值:** `password`
**新值:** `ddnai@2025#mysql`
**状态:** ✅ 已使用强密码替换
> ⚠️ **部署时必须修改为实际数据库密码!**
**强密码建议:**
- 长度至少12位
- 包含大小写字母、数字、特殊字符
- 不使用字典单词或常见组合
- 定期更换建议3-6个月
---
### 3. Druid监控密码 ✅
**文件:** `ry-news-admin/src/main/resources/application-druid.yml`
```yaml
statViewServlet:
login-username: ddnai_admin # ✅ 已修改
login-password: Ddnai@2025#Druid # ✅ 已修改
```
**原值:**
- 用户名: `ruoyi`
- 密码: `123456`
**新值:**
- 用户名: `ddnai_admin`
- 密码: `Ddnai@2025#Druid`
**状态:** ✅ 已使用强密码替换
> ⚠️ **访问地址:** `http://localhost:8080/druid/`
---
## 🔒 生产环境部署检查清单
### 必须修改的配置
- [ ] **JWT密钥** - 修改为64位随机字符串
```yaml
# 文件: application.yml
token:
secret: [生成新的64位随机密钥]
```
- [ ] **数据库密码** - 修改为实际数据库密码
```yaml
# 文件: application-druid.yml
master:
username: [实际数据库用户名]
password: [实际数据库密码]
```
- [ ] **Redis密码** - 如果Redis有密码必须配置
```yaml
# 文件: application.yml
redis:
password: [Redis实际密码]
```
- [ ] **Druid监控密码** - 修改为强密码
```yaml
# 文件: application-druid.yml
statViewServlet:
login-username: [自定义管理员名称]
login-password: [强密码]
```
- [ ] **关闭Swagger** - 生产环境必须关闭
```yaml
# 文件: application.yml
swagger:
enabled: false
```
- [ ] **修改文件上传路径**
```yaml
# 文件: application.yml
ruoyi:
profile: /home/ddnai/uploadPath # 修改为实际路径
```
---
## 🎯 不同环境的配置策略
### 开发环境
- ✅ 使用修改后的默认值即可
- ✅ 可以开启Swagger调试
- ✅ 可以使用简单的数据库密码
### 测试环境
- ⚠️ 建议使用独立的JWT密钥
- ⚠️ 使用与生产环境相同强度的密码
- ⚠️ 关闭Druid监控的公网访问
### 生产环境
- ❗ **必须**修改所有默认值
- ❗ **必须**关闭Swagger
- ❗ **必须**使用强密码
- ❗ **必须**配置HTTPS
- ❗ **必须**限制Druid监控访问IP
---
## 🔐 密码强度建议
### JWT密钥
```
长度: 64位以上
字符集: Base64或随机字符
示例: Ym9keTp7InVzZXJJZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInBhc3N3b3JkIjoi
```
### 数据库密码
```
长度: 16位以上
字符集: 大小写字母+数字+特殊字符
示例: MyS3cur3P@ssw0rd!2025#Db
```
### 管理后台密码
```
长度: 12位以上
字符集: 大小写字母+数字+特殊字符
示例: Admin@Dd2025#Secure
```
---
## 📋 密钥管理最佳实践
### 1. 环境变量方式(推荐)
```bash
# Linux/Mac
export JWT_SECRET="your-secret-key"
export DB_PASSWORD="your-db-password"
# Windows
set JWT_SECRET=your-secret-key
set DB_PASSWORD=your-db-password
```
在配置文件中引用:
```yaml
token:
secret: ${JWT_SECRET}
datasource:
password: ${DB_PASSWORD}
```
### 2. 配置文件加密(推荐)
使用Jasypt等工具加密配置文件中的敏感信息
```xml
<!-- 添加依赖 -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
```
```yaml
# 加密后的配置
token:
secret: ENC(encrypted-value)
```
### 3. 配置中心方式(企业推荐)
使用Nacos、Apollo等配置中心统一管理敏感配置
- 集中管理
- 动态更新
- 权限控制
- 审计日志
---
## 🚨 安全告警配置
### 密码泄露监控
- 定期检查日志文件,确保没有密码泄露
- 使用工具扫描代码仓库中的敏感信息
- 建议使用 git-secrets 防止密码提交
### 访问控制
```yaml
# 限制Druid监控访问IP
druid:
statViewServlet:
allow: 127.0.0.1,192.168.1.0/24 # 仅允许内网访问
```
### 日志脱敏
确保日志中不输出敏感信息:
```java
// 密码脱敏示例
log.info("用户登录: {}, 密码: {}", username, "******");
```
---
## ✅ 修改完成后验证
### 1. JWT密钥验证
```bash
# 启动后登录系统检查token是否正常生成
curl -X POST http://localhost:8080/login \
-d '{"username":"admin","password":"admin123"}'
```
### 2. 数据库连接验证
```bash
# 启动应用,检查日志
# 应显示: HikariPool-1 - Starting...
# 应显示: HikariPool-1 - Start completed.
```
### 3. Druid监控验证
```bash
# 访问监控页面
http://localhost:8080/druid/
# 使用新的用户名密码登录
```
---
## 📞 问题排查
### 启动失败 - JWT相关错误
```
原因: JWT密钥不符合要求
解决: 确保密钥为Base64编码长度足够
```
### 数据库连接失败
```
原因: 密码配置错误或特殊字符未转义
解决: 检查密码是否正确,特殊字符使用引号包裹
```
### Druid监控无法访问
```
原因: IP限制或密码错误
解决: 检查allow配置和密码设置
```
---
## 📊 当前配置状态
| 配置项 | 原默认值 | 新默认值 | 安全等级 | 建议 |
|-------|---------|---------|---------|------|
| JWT密钥 | `abcdefg...xyz` | `YWFhMzlh...MjVzLW` | 🟡 中等 | 生产环境使用64位 |
| 数据库密码 | `password` | `ddnai@2025#mysql` | 🟢 较强 | 改为实际密码 |
| Druid用户名 | `ruoyi` | `ddnai_admin` | 🟢 良好 | 可自定义 |
| Druid密码 | `123456` | `Ddnai@2025#Druid` | 🟢 较强 | 建议16位以上 |
---
## 🎉 总结
**已完成的改进:**
1. JWT密钥从简单字符串改为随机Base64编码
2. 数据库密码从弱密码改为强密码
3. Druid监控账号密码全面加强
4. 添加了配置注释提醒
⚠️ **仍需注意:**
1. 部署到生产环境前必须修改所有密码
2. 定期更换密钥和密码
3. 使用配置中心或环境变量管理敏感信息
4. 关闭生产环境的调试接口
🔒 **安全是一个持续的过程,请定期检查和更新配置!**
---
**最后更新时间:** 2025-10-30
**修改人员:** AI Assistant
**修改版本:** v1.0.0