Docker 部署

PKI Trust Manager Docker 部署指南,涵盖前提条件、配置、许可、验证、维护和安全。

Securetron 新一代 PKI Trust Manager 简化证书管理,支持 TLS、PQC、ADCS / MS CA、AWS CA、Azure Vault 等多种环境。内置智能证书发现和高级通知服务,提供治理能力,并通过 SCEP、EST 和 ACME 实现自动化证书续期,帮助避免服务中断。

了解更多:https://securetron.net

PKI Trust Manager Docker 部署指南

目录

  1. 前提条件
  2. 系统要求
  3. 架构概述
  4. 设置说明
  5. 配置
  6. 环境变量
  7. Nginx 配置
  8. 许可设置
  9. 部署步骤
  10. 验证与测试
  11. 故障排除
  12. 维护

前提条件

软件要求

  • Docker Engine 20.10.0 或更高版本
  • Docker Compose 2.0.0 或更高版本
  • 用于版本控制的 Git
  • SSL/TLS 证书(用于生产部署)

访问要求

  • 能够访问 Docker Hub/Registry 以拉取镜像
  • SQL Server 客户端工具(可选,用于数据库管理)
  • 部署服务器的管理员权限

网络要求

  • 开放端口:1433 (SQL)、5053 (Web UI)、443 (HTTPS)
  • 出站 SMTP 访问权限(端口 2525 或您的 SMTP 端口)
  • 能够解析服务主机名的 DNS

系统要求

最低硬件配置

  • CPU:4 核(x64 架构)
  • RAM:至少 8 GB,建议 16 GB
  • 存储:50 GB 可用磁盘空间(建议 SSD)
  • 网络:1 Gbps 网络接口

建议的生产配置

  • CPU:8 核或更多
  • RAM:32 GB
  • 存储:200 GB 或更多,并采用 RAID 配置
  • 备份:定期备份卷的策略

架构概述

┌─────────────────────────────────────────────────────────────┐
│ PKI Trust Manager Stack                                     │
├─────────────────┬─────────────────┬─────────────────────────┤
│ Nginx Proxy     │ Web UI (CMS)    │ SQL Server              │
│ (SSL/TLS)       │ Port: 5228      │ Port: 1433              │
│ Port: 443       │                 │                         │
└─────────────────┴─────────────────┴─────────────────────────┘
 │                 │                 │
 └────────────────┼──────────────────┘
                  │
       Application Bridge Network

设置说明

1. 克隆/准备部署目录#

mkdir -p /opt/pki-trust-manager
cd /opt/pki-trust-manager

2. 创建目录结构#

mkdir -p {certs,license,config}

3. 创建 Docker Compose 文件#

使用提供的配置创建 docker-compose.yaml:

cat > docker-compose.yaml << 'EOF'
[PASTE PROVIDED DOCKER-COMPOSE.YAML CONTENT HERE]
EOF

4. 创建环境文件#

创建 .env 文件以设置环境变量:

**安全警告:**以下示例中的密码和密钥仅为占位符。生产部署前请将其替换为独有且安全的值;切勿复用或公开真实凭据。

cat >.env << 'EOF'
# Database Configuration
SQL_SA_PASSWORD=YourStrong@Password123
SQL_DATABASE=PKIDBEE
SQL_PORT=1433
 
# Web Application
PKIMAIN_TAG=latest
CMSWEB_PORT=5053
ENV_MODE=Cloud
TRUST_LEVEL=Public
 
# Admin Configuration
ADMIN_USERNAME=superadmin
ADMIN_PASSWORD=YourAdminPass123!
[email protected]
 
# Authentication
LOGIN_VALIDITY=15
OTP_NAME=PKI-Trust-Manager
EMAIL_VERIFICATION=true
 
# Email/SMTP Configuration
SMTP_SERVER=mail.smtp2go.com
SMTP_PORT=2525
SMTP_AUTH=true
SMTP_SSL=true
SMTP_USERNAME=your_smtp_username
SMTP_PASSWORD=your_smtp_password
SMTP_SENDER_NAME="PKI Trust Manager"
[email protected]
 
# Certificate Expiry Settings
EXPIRY_START_RANGE=30
EXPIRY_END_RANGE=3
EXPIRY_NOTIFY_INTERVAL=1
EXPIRY_SCAN_INTERVAL=30
 
# SCEP Configuration
SCEP_OTP_VALIDITY=525600
 
# Licensing (Contact Securetron for these values)
LICENSE_SERVER_URL=http://localhost:7001
LICENSE_API_KEY=your_license_api_key
CMSWEB_CLIENT_ID=webcore-001
LICENSE_OFFLINE_MODE=true
LICENSE_ONLINE_VALIDATION=false
LICENSE_PUBLIC_KEY=your_public_key_here
 
# Logging
LOG_LEVEL=Information
LOG_LEVEL_MS=Warning
 
# Nginx
NGINX_HTTPS_PORT=443
EOF

配置

SSL/TLS 证书设置#

  1. 将 SSL 证书放入 certs/ 目录:
# Certificate files
certs/
├── cert.crt # SSL Certificate
└── key.pem # Private Key
  1. 测试时可生成自签名证书:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout certs/key.pem \
  -out certs/cert.crt \
  -subj "/C=US/ST=State/L=City/O=Organization/CN=pki.yourdomain.com"

Nginx 配置#

创建 nginx.conf:

events {
  worker_connections 1024;
}
 
http {
  upstream pki_web {
    server cmsweb.local:5228;
  }
 
  server {
    listen 443 ssl http2;
    server_name pki.yourdomain.com;
 
    ssl_certificate /etc/nginx/cert.crt;
    ssl_certificate_key /etc/nginx/key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
 
    # Security headers
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
 
    location / {
      proxy_pass http://pki_web;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
 
      proxy_buffer_size 128k;
      proxy_buffers 4 256k;
      proxy_busy_buffers_size 256k;
    }
 
    # Health check endpoint
    location /health {
      proxy_pass http://pki_web/health;
      access_log off;
    }
  }
}

环境变量

关键安全变量

变量说明默认值必需
SQL_SA_PASSWORDSQL Server SA 密码PKI_Strong@Pass123是
ADMIN_PASSWORD超级管理员密码happy是
SMTP_PASSWORDSMTP 身份验证密码-是
LICENSE_API_KEY许可服务器 API 密钥-是
LICENSE_PUBLIC_KEY用于验证许可的公钥-是

数据库配置

  • 确保 SQL_SA_PASSWORD 符合复杂度要求。
  • 生产部署前更改默认密码。
  • 生产环境可考虑使用 Docker secrets。
  • 在生产环境中使用 MSSQL 时,采用 BYOL 或使用您自己的 MSSQL Server。

电子邮件配置

  • 配置有效的 SMTP 凭据。
  • 设置适当的发件人邮箱。
  • 部署后测试邮件功能。

许可设置

  1. 向 Securetron 获取许可文件(https://securetron.net/contact/)。
  2. 将许可文件放入 license/ 目录:
license/
├── product.lic
└── validation.key
  1. 在 .env 中配置许可参数:
    • 在隔离网络环境中设置 LICENSE_OFFLINE_MODE=true。
    • 云部署时设置 LICENSE_ONLINE_VALIDATION=true。
    • 联系 Securetron 获取 LICENSE_API_KEY 和 LICENSE_PUBLIC_KEY。

部署步骤

1. 初始部署#

# Set proper permissions
chmod 600 certs/key.pem
chmod 644 certs/cert.crt
 
# Pull images
docker-compose pull
 
# Start services
docker-compose up -d
 
# View logs
docker-compose logs -f

2. 验证部署#

# Check container status
docker-compose ps
 
# Check SQL Server health
docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \
  -S localhost -U sa \
  -P "${SQL_SA_PASSWORD}" \
  -Q "SELECT name FROM sys.databases"
 
# Check web application
curl -k https://localhost/health

3. 初始设置#

  1. 访问 Web UI:https://your-server-domain。
  2. 使用 .env 中的超级管理员凭据登录。
  3. 完成初始配置:
    • 配置组织设置。
    • 设置证书颁发机构。
    • 配置通知模板。
    • 添加用户帐户。

验证与测试

健康检查

# Database health
docker-compose exec sqlserver /opt/mssql-tools18/bin/sqlcmd \
  -S localhost -U sa -P "${SQL_SA_PASSWORD}" \
  -Q "SELECT 1"
 
# Application health
curl -f https://localhost/health
 
# SSL verification
openssl s_client -connect localhost:443 -servername pki.yourdomain.com

功能测试

  1. 用户身份验证:使用管理员凭据登录。
  2. 证书操作:签发测试证书。
  3. 电子邮件通知:触发测试通知。
  4. SCEP 协议:测试 SCEP 注册(如已配置)。
  5. 备份/恢复:测试数据库备份功能。

故障排除

常见问题

1. SQL Server 连接问题

# Check SQL Server logs
docker-compose logs sqlserver
 
# Verify network connectivity between containers
docker-compose exec cmsweb ping sqlserver.local

2. Web 应用无法启动

# Check application logs
docker-compose logs cmsweb
 
# Verify environment variables
docker-compose exec cmsweb env | grep ConnectionStrings

3. SSL/TLS 问题

# Verify certificate permissions
ls -la certs/
 
# Test Nginx configuration
docker-compose exec nginx nginx -t

4. 许可验证失败

  • 确认 license/ 目录中存在许可文件。
  • 检查到许可服务器的网络连接。
  • 验证许可到期日期。

日志位置

  • 应用日志:容器日志 (docker-compose logs cmsweb)
  • 数据库日志:容器日志 (docker-compose logs sqlserver)
  • Nginx 日志:容器日志 (docker-compose logs nginx)
  • Docker 日志:journalctl -u docker.service

维护

备份流程

# Database backup
docker-compose exec sqlserver /opt/mssql-tools18/bin/sqlcmd \
  -S localhost -U sa -P "${SQL_SA_PASSWORD}" \
  -Q "BACKUP DATABASE [${SQL_DATABASE}] TO DISK='/var/opt/mssql/backup/$(date +%Y%m%d).bak'"
 
# Configuration backup
tar czf pki-backup-$(date +%Y%m%d).tar.gz \
  docker-compose.yaml .env nginx.conf certs/ license/

更新流程

# Pull latest images
docker-compose pull
 
# Restart services
docker-compose up -d
 
# Cleanup old images
docker image prune -f

监控

  1. 资源监控:CPU、内存和磁盘使用情况。
  2. 证书到期:监控证书有效期。
  3. 应用日志:定期检查错误。
  4. 数据库大小:监控数据库增长情况。

安全强化

  1. 定期更新:保持 Docker 和镜像为最新版本。
  2. 密码轮换:定期更新密码。
  3. 访问控制:限制对部署目录的访问。
  4. 网络安全:正确配置防火墙规则。
  5. 审计日志:启用并监控审计记录。
  6. 用户 MFA:使用内置 TOTP MFA 或 Enterprise SSO (SAML / OpenID)。

支持

如需技术支持:

  1. 文档:https://securetron.net/documentation
  2. 支持门户:https://securetron.net
  3. 紧急联系邮箱:[email protected]

注意:本部署指南适用于 PKI Trust Manager 2.x。请始终参阅适用于具体版本的官方文档。