# P1验证签名
对P1签名进行验证
# 一、请求说明
- 请求地址:http://api.spiderid.cn/openapi/svs/v1/sign/verify/p1,https://api.spiderid.cn/openapi/svs/v1/sign/verify/p1
- 服务接口名称(即公共参数method的值): sign/verify/p1
- 请求方式:POST
TIP
当使用SDK时,请求地址:https://api.spiderid.cn
# 二、请求参数
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
templateId | String | 否 | 验证模板id,不填写则仅验证签名 (如果管理系统配置默认模板,不传将使用默认模板校验证书) |
signType | CertSearchEnum | 是 | 验证签名方式 |
signItemValue | String | 是 | 验证签名方式的值 |
signature | String | 是 | 签名值,默认数据类型为base64 |
data | String | 是 | 原文数据 |
dataType | DataType | 是 | 原文数据格式 注:PKI 3.3.0版本 新增摘要base64和摘要hex两种数据格式 |
signatureAlgorithm | SignatureAlgorithm | 否 | 签名算法:SM2证书签名算法为SM3withSM2,RSA默认为SHA256withRSA |
returnCert | Boolean | 否 | 响应中是否包含证书内容 |
signatureDataType | DataType | 否 | 签名值数据格式 (base64,hex) 注:此字段为 PKI 3.3.0版本 新增字段 新增hex格式 |
注:当原文数据格式为摘要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 |
# 三、响应参数
data 结果信息 | 类型 | 描述 |
---|---|---|
cert | String | 签名证书 (仅在配置时返回) |
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":{
"verification":0,
"original":"562*****pWw5o2u",
"cert":"MIICszCCAligAwI****Karu1A+nGqO78Uw="
}
}
# 五、失败示例
JSON示例
{
"code":10201,
"requestId":"xxx",
"message":"证书内容不合法"
}
# 六、SDK请求示例
// 提供的URL
String url = "https://api.spiderid.cn";
// 您的appKey
String appKey = "XXX";
// 您的appSecret
String appSecret = "XXX";
// 1.原客户端
PkiClient client = new PkiOkhttpClient(url, appKey, appSecret);
String certBase64 = "MIICszCCAligAwIBAgINAO2Cjz/tEqZSV*********Karu1A+nGqO78Uw=";
String certId = "XXX";
String data = "签名数据";
String signature = "MEUCIH2eIxHO3UVWDkY8D*********Eix+kcKSBfCGFyi42EVMlmJcXdrWU=";
P1VerifyRequest request = new P1VerifyRequest();
//设置模板id
request.setTemplateId("xxx");
//通过何种方式进行签名 CERT_ID:证书ID,KEY_INDEX:密钥索引, SN_HEX:证书序列号(十六进制格式),SN_DEC:证书序列号(十进制格式),TN_HASH:证书证书指纹,CERT_CN:证书CN ,CERT_DN:证书主题项(DN)
request.setSignType(CertSearchEnum.CERT_ID);
//签名项目的值
request.setSignItemValue(certId);
//签名项目的值
request.setDataType(DataType.ORIGINAL);
// 签名数据
request.setData(data);
// 签名值
request.setSignature(signature);
// 签名算法:SM2证书签名算法为SM3withSM2,RSA默认为SHA256withRSA
request.setSignatureAlgorithm(SignatureAlgorithm.SHA1withRSA);
// 是否返回证书
request.setReturnCert(true);
try {
P1VerifyResponse response = client.execute(request);
// 后续业务
if (response.isSuccess()) {
System.out.println("成功响应:" + response.getBody());
} else {
System.out.println("失败响应:" + response.getBody());
}
} catch (ApiException e) {
e.printStackTrace();
}