国密版接口与普通版的业务参数、返回字段完全一致,本文只说明国密版接口报文格式与算法约定。
国密版接口:POST + JSON,请求与响应全 程加密,以 SM2 签名替代 token 完成身份认证。
1. 接口对照#
| 接口名称 | 普通版(GET) | 国密版(POST) |
|---|
| 单船查询 | /shipAIS/v2/search | /shipAIS/gm/search |
| 船舶当前状态 | /shipAIS/v2/currentInfo | /shipAIS/gm/currentInfo |
| 挂港预测 | /shipAIS/v2/portOfCalls | /shipAIS/gm/portOfCalls |
| 船舶轨迹 | /shipAIS/v2/trajectory | /shipAIS/gm/trajectory |
| 全球塞港查询 | /shipAIS/v2/portCongestion | /shipAIS/gm/portCongestion |
业务参数由 URL 改为放入加密报文内,键名与普通版参数名一致,返回结构不变。
必填参数 companyCode,每个接口的明文业务 JSON 都必须携带,用于查询贵司登记的公钥完成验签。
2. 密钥约定#
贵司须生成国密 SM2 密钥对,并将公钥提供给我方登记(与 companyCode 绑定);私钥由贵司自行保管,用于对请求报文签名,我方凭登记公钥验签确认贵司身份。
平台公钥由我方提供,用于加密会话密钥及验证响应签名。
MIIBMzCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA/////v////////////////////8AAAAA//////////8wRAQg/////v////////////////////8AAAAA//////////wEICjp+p6dn140TVqeS89lCafzl4n1FauPkt28vUFNlA6TBEEEMsSuLB8ZgRlfmQRGajnJlI/jC7/yZgvhcVpFiTNMdMe8Nzai9PZ3nFm9zuNraSFT0KmHfMYqR0AC3zLlITnwoAIhAP////7///////////////9yA99rIcYFK1O79Ak51UEjAgEBA0IABCKERDlz+SuFDu8a/HZu+dPXEbHRa0axGhf9UAlx52MQWgyZATU/ux/L0jBS51MUMbLFzCaj66pQaHdmkXNWQQI=
3. 算法约定#
| 项目 | 约定 |
|---|
| SM2 曲线 | sm2p256v1 |
| 签名 | SM3withSM2(用户标识 ID 为 GM/T 0003 默认值 1234567812345678),签名值 ASN.1 DER,Base64 |
| 签名对象 | 业务 JSON 明文的原始 UTF-8 字节(非密文、非 Base64) |
| 报文加密 | SM4-CBC + PKCS7 |
| 数字信封 | SM2 加密会话密钥 K(16 字节),密文排列 C1C3C2,ASN.1 DER,Base64 |
| 文本/传输编码 | UTF-8 / 二进制字段一律 Base64 |
4. 请求报文#
{
"data": "Base64( SM4(K, 明文业务JSON) )",
"key": "Base64( SM2信封(平台公钥, K) )",
"iv": "Base64( IV )",
"sign": "Base64( SM3withSM2签名(客户私钥, 明文业务JSON) )",
"timestamp": "1728201600123",
"nonce": "550e8400-e29b-41d4-a716-446655440000"
}
| 字段 | 必填 | 说明 |
|---|
data | 是 | 明文业务 JSON 经 SM4-CBC(PKCS7) 加密后的 Base64 |
iv | 是 | SM4 初始向量(16 字节,随机)的 Base64 |
key | 是 | 会话密钥 K 经平台公钥 SM2 加密(数字信封)后的 Base64 |
sign | 是 | 对明文业务 JSON 原文的 SM3withSM2 签名,Base64 |
timestamp | 是 | 毫秒时间戳(防重放) |
nonce | 是 | 唯一随机串(如 UUID,防重放) |
{
"companyCode": "1007",
"vessel": "COSCO ADEN",
"vesselType": "20000",
"startTime": "2026-09-21 00:00:00",
"endTime": "2026-10-01 00:00:00",
"scope": "ALL"
}
5. 响应报文#
{
"data": "Base64( SM4(K, 响应业务JSON) )",
"iv": "Base64( 新IV )",
"sign": "Base64( SM3withSM2签名(平台私钥, 响应业务JSON) )"
}
| 字段 | 说明 |
|---|
data | 响应业务 JSON 经 SM4-CBC(PKCS7) 加密后的 Base64 |
iv | 本次响应新生成的 16 字节初始向量(与请求 IV 不同),Base64 |
sign | 对响应业务 JSON 原文的 SM3withSM2 签名(平台私钥),Base64 |
解析顺 序:用请求时保留的会话密钥 K + 响应 iv 解密 data → 用平台公钥对明文验签 → 验签通过后按普通版文档解析业务数据。响应复用请求的会话密钥 K(仅换 IV),故本次请求生成的 K 需保留至响应处理完毕。
6. 防重放#
timestamp 与服务器时间偏差超过 5 分钟,请求被拒绝。
7. 错误响应#
验签失败、解密失败、防重放校验失败、参数缺失等情况,返回 HTTP 非 200 的明文 JSON 错误信息(不加密),结构与普通版失败响应一致,无需解密。Modified at 2026-10-09 04:04:36