政务服务管理局数字档案馆,让数据活起来的“档案管家”
哎,聊到政务服务管理局的数字档案馆,我可得跟你好好唠唠。这玩意儿,乍一听是不是觉得特高冷,特技术范儿,感觉离咱普通人的唠嗑场景十万八千里?别急,我当初也是这么想的,后来深入接触了几回,才发现它根本不是...
2026年06月15日 12:55:32
选择支持电子签章的档案管理软件时,需同时满足档案管理合规性与电子签章法律效力。软件必须包含以下核心模块:
推荐技术栈组合:Java Spring Boot后端 + Vue.js前端 + PostgreSQL数据库 + 国产中间件(如东方通)。此组合兼顾性能、安全与国产化适配。
操作系统:CentOS 7.9 minimal
执行以下命令配置基础环境:
``` 安装Java环境 yum install -y java-11-openjdk-devel java -version 验证安装,应显示11.0.x 安装PostgreSQL 14 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm yum install -y postgresql14-server /usr/pgsql-14/bin/postgresql-14-setup initdb systemctl start postgresql-14 systemctl enable postgresql-14 创建数据库与用户 sudo -u postgres psql -c "CREATE USER archive_user WITH PASSWORD 'YourStrongPassword123!';" sudo -u postgres psql -c "CREATE DATABASE archive_db OWNER archive_user;" ```以开源方案为例,推荐使用基于OFD格式的签章方案。下载并部署:
``` 下载档案管理基础系统 wget https://github.com/example-archive/archive-system/releases/download/v2.1.0/archive-system-2.1.0.zip unzip archive-system-2.1.0.zip -d /opt/archive-system 下载OFD签章组件 wget https://github.com/ofdrw/ofdrw-sign/releases/download/v1.5.0/ofdrw-sign-server-1.5.0.jar cp ofdrw-sign-server-1.5.0.jar /opt/archive-system/lib/ ```编辑配置文件 /opt/archive-system/config/application-sign.yml:
``` CA证书服务配置 ca: provider: cfca 或 local, shca api-url: https://api.cfca.com.cn/cert-service/v2 app-id: YOUR_APP_ID app-secret: YOUR_APP_SECRET 签章服务器配置 sign: server-port: 8081 keystore-path: /opt/archive-system/keystore/sign.jks keystore-password: KeystorePass123 validity-days: 3650 OFD签章参数 ofd: seal-position: bottom-right 签章位置 seal-size: 80x40 签章尺寸(像素) time-stamp-url: http://tsa.cnca.cn/TSS/HttpTS 时间戳服务 ```在 /opt/archive-system/config/application-security.yml 中添加:
``` 国密算法配置 sm: enabled: true provider-class: org.bouncycastle.jce.provider.BouncyCastleProvider key-length: 256 sign-algorithm: SM3withSM2 encrypt-algorithm: SM4/CBC/PKCS5Padding 依赖库配置 dependencies: bcprov-jdk15on: 1.70 gmssl: 2.5.0 ```安装国密依赖库:
``` cd /opt/archive-system/lib wget https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.70/bcprov-jdk15on-1.70.jar wget https://github.com/guanzhi/GmSSL/releases/download/v2.5.0/gmssl-jni-2.5.0.jar ```创建档案分类配置文件 /opt/archive-system/config/archive-categories.xml:
```
编辑 /opt/archive-system/config/storage.yml:
``` 主存储(热数据) primary: type: fast-dfs servers: 192.168.1.100:23000,192.168.1.101:23000 group-name: group1 connect-timeout: 5000 备份存储(冷数据) backup: type: s3 endpoint: https://oss-cn-beijing.aliyuncs.com bucket: archive-backup-bucket access-key: YOUR_ACCESS_KEY secret-key: YOUR_SECRET_KEY 存储策略 policy: hot-data-days: 365 365天内为热数据 auto-migrate: true 自动迁移冷数据 compression: gzip 冷数据压缩 ```创建启动脚本 /opt/archive-system/start.sh:
``` !/bin/bash 启动数据库 systemctl start postgresql-14 启动签章服务 nohup java -jar /opt/archive-system/lib/ofdrw-sign-server-1.5.0.jar \ --spring.config.location=/opt/archive-system/config/application-sign.yml \ > /var/log/ofdrw-sign.log 2>&1 & 启动主应用 cd /opt/archive-system nohup java -jar archive-system-2.1.0.jar \ --spring.profiles.active=prod \ > /var/log/archive-system.log 2>&1 & echo "等待服务启动..." sleep 30 检查服务状态 curl -f http://localhost:8080/health || echo "主服务启动失败" curl -f http://localhost:8081/health || echo "签章服务启动失败" ```给脚本执行权限并启动:
``` chmod +x /opt/archive-system/start.sh ./start.sh ```使用curl命令测试签章流程:
``` 1. 上传待签章文档 curl -X POST http://localhost:8080/api/archive/upload \ -F "file=@contract.ofd" \ -F "category=contract" \ -H "Authorization: Bearer YOUR_TOKEN" 2. 申请签章(返回签章任务ID) curl -X POST http://localhost:8080/api/sign/apply \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{ "archiveId": "123456", "signers": ["user1@company.com", "user2@company.com"], "signOrder": "parallel", "validityDays": 365 }' 3. 执行签章(使用CA证书) curl -X POST http://localhost:8081/api/sign/execute \ -H "Content-Type: application/json" \ -d '{ "taskId": "sign-task-001", "certSn": "YOUR_CERT_SERIAL_NUMBER", "certPassword": "CERT_PASSWORD", "signatureImage": "base64_encoded_seal_image" }' 4. 验证签章 curl -X GET "http://localhost:8080/api/sign/verify?archiveId=123456&signatureId=sign-001" ```创建验证脚本 /opt/archive-system/verify-signature.sh:
``` !/bin/bash 下载OFD验证工具 wget https://github.com/ofdrw/ofdrw/releases/download/v2.0.0/ofdrw-verifier-2.0.0.jar 验证签章完整性 java -jar ofdrw-verifier-2.0.0.jar \ --ofd-file /path/to/signed.ofd \ --ca-cert /path/to/cfca-root.crt \ --timestamp-verify \ --output-json /tmp/verify-result.json 解析验证结果 cat /tmp/verify-result.json | jq '.signatures[0] | {valid: .valid, signTime: .signTime, signer: .signer}' ```创建证书监控脚本 /opt/archive-system/check-certs.sh:
``` !/bin/bash 检查所有用户证书过期时间 CERT_DIR="/opt/archive-system/certs/users" WARN_DAYS=30 for cert in $(find $CERT_DIR -name ".pfx"); do expiry=$(openssl pkcs12 -in $cert -nodes -passin pass: 2>/dev/null | \ openssl x509 -noout -enddate | cut -d= -f2) expiry_ts=$(date -d "$expiry" +%s) current_ts=$(date +%s) days_left=$(( ($expiry_ts - $current_ts) / 86400 )) if [ $days_left -le $WARN_DAYS ]; then echo "警告: 证书 $(basename $cert) 将在 ${days_left} 天后过期" 发送邮件通知 echo "证书即将过期" | mail -s "证书过期警告" admin@company.com fi done ```添加到crontab每天执行:
``` echo "0 9 /opt/archive-system/check-certs.sh" >> /etc/crontab ```配置审计日志自动归档:
``` 编辑logback配置 vi /opt/archive-system/config/logback-spring.xml 添加审计日志配置创建全量备份脚本:
``` !/bin/bash 数据库备份 BACKUP_DIR="/backup/archive/$(date +%Y%m%d)" mkdir -p $BACKUP_DIR 备份数据库 pg_dump -U archive_user -h localhost -d archive_db \ -F c -f $BACKUP_DIR/archive_db.dump 备份配置文件 tar -czf $BACKUP_DIR/config.tar.gz /opt/archive-system/config/ 备份签章记录(只备份索引,实际文件在对象存储) curl -X GET "http://localhost:8080/api/archive/export?type=signature-index" \ -H "Authorization: Bearer YOUR_TOKEN" \ > $BACKUP_DIR/signature-index.json 上传到远程备份 aws s3 cp $BACKUP_DIR s3://archive-backup-bucket/ --recursive 清理7天前的本地备份 find /backup/archive -type d -mtime +7 -exec rm -rf {} \; ```