# 证书管理系统部署指南

本文档详细说明了如何部署和使用证书管理系统。

## 系统概述

证书管理系统支持多环境部署，能够自动处理微信支付和支付宝的证书加载：

- **开发环境**: 从classpath加载证书
- **生产环境**: 从Docker挂载卷加载证书
- **文件系统模式**: 从本地文件系统加载证书

## 目录结构

```
项目根目录/
├── certs/                          # 生产环境证书目录
│   ├── README.md                   # 证书目录说明
│   ├── wechat/                     # 微信支付证书
│   │   ├── apiclient_key.pem       # 商户私钥证书
│   │   ├── apiclient_cert.pem      # 商户证书
│   │   └── wechatpay_cert.pem      # 微信支付平台证书
│   └── alipay/                     # 支付宝证书
│       ├── app_private_key.pem     # 应用私钥
│       ├── appCertPublicKey.crt    # 应用公钥证书
│       ├── alipayCertPublicKey.crt # 支付宝公钥证书
│       └── alipayRootCert.crt      # 支付宝根证书
├── src/main/resources/certs/dev/   # 开发环境证书目录
│   ├── wechat/                     # 微信支付证书
│   └── alipay/                     # 支付宝证书
├── scripts/
│   └── setup-certificates.sh      # 证书管理脚本
├── Dockerfile                      # Docker构建文件
└── docker-compose.yml             # Docker编排文件
```

## 快速开始

### 1. 初始化证书目录

```bash
# 使用脚本初始化
./scripts/setup-certificates.sh init

# 或手动创建
mkdir -p certs/wechat certs/alipay
mkdir -p src/main/resources/certs/dev/wechat
mkdir -p src/main/resources/certs/dev/alipay
```

### 2. 配置证书文件

#### 开发环境
将证书文件放置在 `src/main/resources/certs/dev/` 目录下：

```bash
# 微信支付证书
cp your-wechat-certs/* src/main/resources/certs/dev/wechat/

# 支付宝证书
cp your-alipay-certs/* src/main/resources/certs/dev/alipay/
```

#### 生产环境
将证书文件放置在 `certs/` 目录下：

```bash
# 微信支付证书
cp your-wechat-certs/* certs/wechat/

# 支付宝证书
cp your-alipay-certs/* certs/alipay/
```

### 3. 设置证书权限

```bash
# 使用脚本设置权限
./scripts/setup-certificates.sh perms

# 或手动设置
chmod -R 444 certs/
chmod 755 certs/ certs/wechat/ certs/alipay/
```

### 4. 验证证书配置

```bash
# 检查证书文件
./scripts/setup-certificates.sh check
```

## 环境配置

### 开发环境 (application.yml)

```yaml
certificate:
  load-mode: CLASSPATH
  dev-cert-path: certs/dev
```

### 生产环境 (application-prod.yml)

```yaml
certificate:
  load-mode: VOLUME
  cert-root-path: /app/certs
```

## Docker部署

### 1. 构建镜像

```bash
# 构建应用
mvn clean package -DskipTests

# 构建Docker镜像
docker build -t gxwebsoft-server .
```

### 2. 使用Docker Compose部署

```bash
# 启动所有服务
docker-compose up -d

# 查看日志
docker-compose logs -f gxwebsoft-app

# 停止服务
docker-compose down
```

### 3. 单独运行容器

```bash
docker run -d \
  --name gxwebsoft-server \
  -p 8080:8080 \
  -v $(pwd)/certs:/app/certs:ro \
  -e SPRING_PROFILES_ACTIVE=prod \
  -e CERTIFICATE_LOAD_MODE=VOLUME \
  gxwebsoft-server
```

## API接口

证书管理系统提供了完整的REST API：

### 获取证书状态
```http
GET /api/system/certificate/status
```

### 证书健康检查
```http
GET /api/system/certificate/health
```

### 获取诊断信息
```http
GET /api/system/certificate/diagnostic
```

### 检查特定证书
```http
GET /api/system/certificate/check/{certType}/{fileName}
```

### 验证证书文件
```http
GET /api/system/certificate/validate/{certType}/{fileName}
```

## 监控和健康检查

### Spring Boot Actuator

系统集成了Spring Boot Actuator健康检查：

```http
GET /actuator/health
```

健康检查会验证：
- 证书文件是否存在
- 证书文件是否可读
- X509证书是否有效
- 证书是否过期

### 日志监控

关键日志信息：
- 证书加载模式
- 证书文件路径
- 证书验证结果
- 错误和异常信息

## 故障排除

### 常见问题

1. **证书文件不存在**
   ```
   检查文件路径和权限
   使用 ./scripts/setup-certificates.sh check 验证
   ```

2. **证书权限错误**
   ```
   使用 ./scripts/setup-certificates.sh perms 修复权限
   ```

3. **Docker挂载问题**
   ```
   确保证书目录正确挂载到 /app/certs
   检查文件权限和SELinux设置
   ```

4. **证书过期**
   ```
   使用 /api/system/certificate/validate 接口检查证书有效期
   及时更新过期证书
   ```

### 调试命令

```bash
# 检查证书文件
./scripts/setup-certificates.sh check

# 验证Docker挂载
docker exec -it gxwebsoft-server ls -la /app/certs

# 查看应用日志
docker-compose logs -f gxwebsoft-app

# 测试证书API
curl -X GET "http://localhost:8080/api/system/certificate/health"
```

## 安全注意事项

1. **不要将证书文件提交到版本控制系统**
2. **设置正确的文件权限（444 for files, 755 for directories）**
3. **定期更新证书文件**
4. **备份重要的证书文件**
5. **使用HTTPS传输证书文件**
6. **限制证书文件的访问权限**

## 维护和更新

### 证书更新流程

1. 备份现有证书
2. 下载新证书文件
3. 更新证书文件
4. 重启应用服务
5. 验证证书状态

### 定期检查

- 每月检查证书有效期
- 监控证书健康状态
- 更新过期证书
- 备份证书文件

## 支持和联系

如有问题，请联系技术支持或查看项目文档。
