|
|
2 viikkoa sitten | |
|---|---|---|
| .settings | 2 viikkoa sitten | |
| bin | 2 viikkoa sitten | |
| lib | 2 viikkoa sitten | |
| src | 2 viikkoa sitten | |
| .DS_Store | 2 viikkoa sitten | |
| .classpath | 2 viikkoa sitten | |
| .dockerignore | 2 viikkoa sitten | |
| .project | 2 viikkoa sitten | |
| API使用说明.md | 2 viikkoa sitten | |
| Dockerfile | 2 viikkoa sitten | |
| README.md | 2 viikkoa sitten | |
| deploy.sh | 2 viikkoa sitten | |
| docker-compose.yml | 2 viikkoa sitten | |
| 快速部署.txt | 2 viikkoa sitten | |
| 故障排除.md | 2 viikkoa sitten | |
| 私钥配置说明.md | 2 viikkoa sitten | |
| 私钥错误修复说明.md | 2 viikkoa sitten | |
| 部署说明.md | 2 viikkoa sitten |
基于国密SM2算法的签名和验签HTTP服务,使用纯Java实现(BouncyCastle),支持Docker部署。
# 编译
javac -encoding UTF-8 -d bin -cp "lib/*" $(find src -name "*.java")
# 运行
java -cp "bin:lib/*" demo.com.SignServer
# 一键部署
./deploy.sh
# 或使用docker-compose
docker-compose up -d
服务器只需要Docker,不需要Java环境!
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
}
POST http://localhost:8888/api/verify
# 请求体
{
"data": {
"version": "1.0"
},
"sign": "304402206FC7...",
"pubKey": "公钥(可选)",
"reqOrgNo": "机构号(可选)"
}
# 响应
{
"success": true,
"valid": true,
"signData": "VERSION=1.0",
"timestamp": 1761288550803
}
GET http://localhost:8888/api/health
# 响应
{
"status": "ok",
"timestamp": 1761288550040
}
支持5种配置方式(按优先级从高到低):
API接口传入(最灵活)⭐
priKey 和 reqOrgNo命令行参数
java -cp "bin:lib/*" demo.com.SignServer "" "机构号" "私钥" "公钥"
环境变量(推荐生产环境)⭐
export SM2_PRIVATE_KEY="私钥"
export REQ_ORG_NO="机构号"
java -cp "bin:lib/*" demo.com.SignServer
配置文件
# config.properties
reqOrgNo=201811200001003
priKey=您的私钥
sltPubKey=您的公钥
代码默认值(仅供测试)
详细说明请查看: 私钥配置说明.md
不依赖OpenSSL,不需要安装系统扩展!
# 启动
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止
docker-compose down
# 构建镜像
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
chmod 600xingfutong-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
A: 使用Docker部署,只需要安装Docker即可。
A: 多租户场景通过API传入;单租户使用环境变量或Secret管理工具。
A: Java 8及以上版本。Docker镜像使用OpenJDK 8。
A: 国密SM2是中国自主研发的椭圆曲线公钥密码算法,相当于国际上的ECDSA。
A: 使用纯Java的BouncyCastle实现,跨平台、易部署、无需安装系统扩展。
本项目仅供学习和测试使用。
欢迎提交Issue和Pull Request。
快速上手: 查看 快速部署.txt
详细文档: 查看 部署说明.md