Không có mô tả

light 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
.settings 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
bin 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
lib 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
src 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
.DS_Store 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
.classpath 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
.dockerignore 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
.project 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
API使用说明.md 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
Dockerfile 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
README.md 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
deploy.sh 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
docker-compose.yml 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
快速部署.txt 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
故障排除.md 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
私钥配置说明.md 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
私钥错误修复说明.md 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây
部署说明.md 63c81116f5 Add initial project structure and Docker support for SM2 signature service 2 tuần trước cách đây

README.md

SM2签名服务 - HTTP API

基于国密SM2算法的签名和验签HTTP服务,使用纯Java实现(BouncyCastle),支持Docker部署。

🚀 快速开始

本地运行(需要Java)

# 编译
javac -encoding UTF-8 -d bin -cp "lib/*" $(find src -name "*.java")

# 运行
java -cp "bin:lib/*" demo.com.SignServer

访问: http://localhost:8888

Docker部署(无需Java)⭐

# 一键部署
./deploy.sh

# 或使用docker-compose
docker-compose up -d

服务器只需要Docker,不需要Java环境!

📡 API接口

1. 签名接口

POST http://localhost:8888/api/sign

# 请求体
{
  "data": {
    "version": "1.0",
    "txnType": "20250"
  },
  "priKey": "私钥(可选)",
  "reqOrgNo": "机构号(可选)"
}

# 响应
{
  "success": true,
  "signData": "TXNTYPE=20250|VERSION=1.0",
  "sign": "304402206FC7...",
  "timestamp": 1761288550594
}

2. 验签接口

POST http://localhost:8888/api/verify

# 请求体
{
  "data": {
    "version": "1.0"
  },
  "sign": "304402206FC7...",
  "pubKey": "公钥(可选)",
  "reqOrgNo": "机构号(可选)"
}

# 响应
{
  "success": true,
  "valid": true,
  "signData": "VERSION=1.0",
  "timestamp": 1761288550803
}

3. 健康检查

GET http://localhost:8888/api/health

# 响应
{
  "status": "ok",
  "timestamp": 1761288550040
}

🔑 私钥配置方式

支持5种配置方式(按优先级从高到低):

  1. API接口传入(最灵活)⭐

    • 在请求中传入 priKeyreqOrgNo
    • 适合多租户场景
  2. 命令行参数

    java -cp "bin:lib/*" demo.com.SignServer "" "机构号" "私钥" "公钥"
    
  3. 环境变量(推荐生产环境)⭐

    export SM2_PRIVATE_KEY="私钥"
    export REQ_ORG_NO="机构号"
    java -cp "bin:lib/*" demo.com.SignServer
    
  4. 配置文件

    # config.properties
    reqOrgNo=201811200001003
    priKey=您的私钥
    sltPubKey=您的公钥
    
  5. 代码默认值(仅供测试)

详细说明请查看: 私钥配置说明.md

📦 技术栈

  • 语言: Java 8+
  • 加密库: BouncyCastle 1.46 (纯Java实现)
  • 算法: 国密SM2/SM3
  • HTTP服务器: JDK内置HttpServer
  • 容器: Docker

不依赖OpenSSL,不需要安装系统扩展!

📚 文档

🐳 Docker部署

使用docker-compose(推荐)

# 启动
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止
docker-compose down

使用Dockerfile

# 构建镜像
docker build -t sign-server:latest .

# 运行容器
docker run -d \
  --name sm2-sign-server \
  -p 8888:8888 \
  --restart unless-stopped \
  sign-server:latest

传入自定义密钥

docker run -d \
  --name sm2-sign-server \
  -p 8888:8888 \
  -e SM2_PRIVATE_KEY="您的私钥" \
  -e SLT_PUBLIC_KEY="您的公钥" \
  -e REQ_ORG_NO="您的机构号" \
  sign-server:latest

🔒 安全建议

  1. ✅ 生产环境使用HTTPS
  2. ✅ 不要将私钥提交到代码仓库
  3. ✅ 使用环境变量或配置文件管理密钥
  4. ✅ 配置文件设置严格权限 chmod 600
  5. ✅ API传入密钥时必须使用HTTPS

📊 性能

  • 镜像大小: ~85MB (Alpine Linux)
  • 启动时间: ~3秒
  • 内存占用: ~100-200MB
  • 签名速度: ~100-500 TPS (取决于硬件)

🛠️ 开发

项目结构

xingfutong-java/
├── src/demo/com/
│   ├── SignServer.java          # HTTP签名服务器
│   ├── Test.java                 # 测试类
│   ├── entity/                   # 实体类
│   ├── service/                  # 服务接口
│   └── util/
│       ├── ByteArrayUtil.java    # 字节工具
│       ├── cxf/                  # CXF工具
│       └── sm/                   # SM2/SM3实现
│           ├── SM2.java          # SM2核心算法
│           ├── SM2Utils.java     # SM2工具类
│           ├── SM3.java          # SM3算法
│           ├── Cipher.java       # 加密器
│           └── Utils.java        # 工具类
├── lib/                          # 依赖库
│   ├── bcprov-jdk16-1.46.jar    # BouncyCastle
│   ├── fastjson-1.2.40.jar      # JSON解析
│   └── ...
├── bin/                          # 编译输出
├── Dockerfile                    # Docker镜像定义
├── docker-compose.yml            # Docker编排
├── deploy.sh                     # 一键部署脚本
└── *.md                          # 文档

编译

javac -encoding UTF-8 -d bin -cp "lib/*" $(find src -name "*.java")

运行

java -cp "bin:lib/*" demo.com.SignServer

❓ 常见问题

Q: 服务器没有Java怎么办?

A: 使用Docker部署,只需要安装Docker即可。

Q: 私钥存在哪里最安全?

A: 多租户场景通过API传入;单租户使用环境变量或Secret管理工具。

Q: 支持什么版本的Java?

A: Java 8及以上版本。Docker镜像使用OpenJDK 8。

Q: SM2是什么?

A: 国密SM2是中国自主研发的椭圆曲线公钥密码算法,相当于国际上的ECDSA。

Q: 为什么不用OpenSSL?

A: 使用纯Java的BouncyCastle实现,跨平台、易部署、无需安装系统扩展。

📝 更新日志

v1.0.0

  • ✅ SM2签名和验签功能
  • ✅ HTTP API服务
  • ✅ 支持API传入私钥
  • ✅ 支持多种配置方式
  • ✅ Docker容器化部署
  • ✅ 完整文档

📄 许可证

本项目仅供学习和测试使用。

🤝 贡献

欢迎提交Issue和Pull Request。


快速上手: 查看 快速部署.txt

详细文档: 查看 部署说明.md