# P1批量验证签名
对P1签名值进行批量验证
# 一、请求说明
- 请求地址:http://IP:PORT/openapi/svs/v1/sign/verify/p1/batch
- 服务接口名称(即公共参数method的值): sign/verify/p1/batch
- 请求方式:POST
# 二、请求参数
| 名称 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| templateId | String | 否 | 验证模板id |
| signType | CertSearchEnum | 是 | 验证签名方式 |
| signItemValue | String | 是 | 验证签名方式的值 |
| signatureList | String | 是 | 签名值集合 |
| dataList | String | 是 | 待验签数据集合 |
| dataType | DataType | 是 | 原文数据格式 |
| signatureAlgorithm | SignatureAlgorithm | 是 | 签名算法 |
| returnCert | Boolean | 否 | 响应中是否包含证书内容 |
| signatureDataType | DataType | 否 | 签名值数据格式 (base64,hex) 不传默认为base64 |
注:当原文数据格式为摘要base64或摘要hex时,注意摘要长度应与签名算法对应。具体算法的摘要长度见签名算法字段解释。
- CertSearchEnum 验证签名方式
| 类型字段 | 介绍 |
|---|---|
| CERT | 证书 |
| CERT_ID | 证书ID |
| SN_HEX | 证书序列号(十六进制格式) |
| SN_DEC | 证书序列号(十进制格式) |
| TN_HASH | 证书指纹 |
| CERT_CN | 证书持有者 |
| CERT_DN | 证书主题项 |
- SignatureAlgorithm 签名算法介绍
| 字段 | 状态介绍 |
|---|---|
| SM3withSM2 | SM3withSM2签名算法(摘要长度应为32字节) |
| SHA1withRSA | SHA1withRSA签名算法(摘要长度应为20字节) |
| SHA256withRSA | SHA256withRSA签名算法(摘要长度应为32字节) |
| SHA512withRSA | SHA512withRSA签名算法(摘要长度应为64字节) |
- DataType 数据类型介绍
| 字段 | 类型介绍 |
|---|---|
| BASE64 | 原文BASE64 |
| HEX | 原文Hex |
| ORIGINAL | 原文 |
| DIGEST_BASE64 | 摘要base64 |
| DIGEST_HEX | 摘要hex |
- dataList 待验签数据集合 和 SignatureList 签名值集合 请使用JSON样式,示例:
["123","345","=;&*abC12!@#$%^&*()\"'<>?:{}_+,.\/;'[]"]
# 三、响应参数
| data 结果信息 | 类型 | 描述 |
|---|---|---|
| cert | String | 签名证书 (仅在配置时返回) |
| result | Integer | 总体结果 0:表示全成功 |
| verifyResults | List<P1verifyResult> | 验证结果集合 |
List<P1verifyResult>对象
| data 结果信息 | 类型 | 描述 |
|---|---|---|
| original | String | 原文数据 |
| verification | Integer | 验证信息 |
| message | String | 验证提示信息 |
- verification 返回码介绍
| 字段 | 状态码 | 状态介绍 |
|---|---|---|
| SUCCESS | 0 | 验证成功 |
| CERT_EXPIRED | 1 | 证书已过期 |
| CERT_INEFFECTIVE | 2 | 证书未生效 |
| CERT_USAGE_DEFICIENCY | 3 | 证书密钥用法错误 |
| CERT_OU_MISMATCHING | 4 | 证书主题项不匹配 |
| CERT_REVOKED | 5 | 证书已注销 |
| CERT_UNTRUSTED | 6 | 证书不可信 |
| SIGN_INVALID | 7 | 数字签名验证不通过 |
| EXTENDED_KEYS_ARE_NOT_SUPPORTED | 8 | 证书密钥扩展用法不支持 |
| UNKNOWN_STATUS | 9 | 证书状态未知 |
| EXCEPTION | 10 | 验证异常 |
| CERT_SERIAL_MISMATCHING | 11 | 证书序列号不匹配 |
# 四、成功示例
JSON示例
{
"code":0,
"message":"success",
"requestId":"xxx",
"data":{
}
}
# 五、失败示例
JSON示例
{
"code":10201,
"requestId":"xxx",
"message":"证书内容不合法"
}
# 六、SDK请求示例
// 提供的URL
String url = "http://localhost:9200";
// 您的appKey
String appKey = "412RkZU3kB";
// 您的appSecret
String appSecret = "SDKv9ld6yhYDcB4TRKtkhboKJurDJR73";
// 1.原客户端
PkiClient pkiClient = new PkiOkhttpClient(url, appKey, appSecret);
P1VerifyBatchRequest request = new P1VerifyBatchRequest();
request.setSignatureDataType(DataType.BASE64);
//request.setTemplateId("640987992c1ca52e602cfe7e");
//通过何种方式进行签名 CERT_ID:证书ID,KEY_INDEX:密钥索引, SN_HEX:证书序列号(十六进制格式),SN_DEC:证书序列号(十进制格式),TN_HASH:证书证书指纹,CERT_CN:证书CN ,CERT_DN:证书主题项(DN)
request.setSignType(CertSearchEnum.CERT_ID);
//签名项目的值
request.setSignItemValue("640723b080a0554c3a6a0fec");
//原文数据类型
request.setDataType(DataType.ORIGINAL);
ArrayList<String> dataList = new ArrayList<>();
dataList.add("123");
dataList.add("312");
//设置待验签数据集合
request.setDataList(dataList);
ArrayList<String> sList = new ArrayList<>();
sList.add("MEYCIQCdc5Oz2oqaIWVDFDbI0haxKDGxpmMFrXCjLuT+V4UB3QIhALyfS3ptgMNymbOX0P9ZPaSh+WJQHxuiH7xz1iJVPN5T");
sList.add("MEUCIDFDlWs7bUKRDPdyULNFpSAOjmti5l+8PXUPudiDOZ5vAiEA62OZV+GZ6AwXweTOkCrTDwuY9PZi8fHOuVuHVRK8UqA=");
//设置签名值集合
request.setSignatureList(sList);
// 摘要算法,SM2证书签名固定为SM3,RSA默认SHA256
request.setSignatureAlgorithm(SignatureAlgorithm.SM3withSM2);
// 是否返回证书
request.setReturnCert(false);
try {
P1VerifyBatchResponse response = pkiClient.execute(request);
// 后续业务
if (response.isSuccess()) {
System.out.println("成功响应:" + response.getBody());
} else {
System.out.println("失败响应:" + response.getBody());
}
} catch (ApiException e) {
e.printStackTrace();
}