# P7验证签名
对P7签名进行验证
# 一、请求说明
- 请求地址:http://api/openapi/svs/v1/sign/verify/p7,https://api/openapi/svs/v1/sign/verify/p7
- 服务接口名称(即公共参数method的值): sign/verify/p7
- 请求方式:POST
TIP
当使用SDK时,请求地址:https://api.spiderid.cn
# 二、请求参数
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
templateId | String | 否 | 验证模板id,不填写则仅验证签名(如果管理系统配置默认模板,不传将使用默认模板校验证书) |
signature | String | 是 | P7签名值,默认数据类型为base64 |
cert | String | 否 | 签名证书(base64),多张证书以换行分隔。 (当签名值不包含证书时,可传入此值验签) |
data | String | 否 | 原文数据 |
dataType | DataType | 否 | 原文数据格式 |
attach | Boolean | 是 | 签名结果中是否包含原文 (true:attached模式/false:detached模式) |
returnCert | Boolean | 否 | 响应中是否包含证书内容 |
signatureDataType | DataType | 否 | 签名值数据格式 (base64,hex) 注:此字段为 PKI 3.3.0版本 新增字段 新增hex格式 |
字段解释
当attach为true时,原文数据和原文数据格式无需填写;
当attach为false时,才需要填写原文数据和原文数据格式
cert字段示例:
request.setCert("-----BEGIN CERTIFICATE-----\n" +
"MIICQDCCAe***mMwXXQ==\n" +
"-----END CERTIFICATE-----\n" +
"-----BEGIN CERTIFICATE-----\n" +
"MIICQT****q9Q2xOo=\n" +
"-----END CERTIFICATE-----\n" +
"-----BEGIN CERTIFICATE-----\n" +
"MIIBuzCCAV6gA**/x8yUJSmYfAE\n" +
"-----END CERTIFICATE-----\n");
- DataType 数据类型介绍
字段 | 类型介绍 |
---|---|
BASE64 | 原文BASE64 |
HEX | 原文Hex |
ORIGINAL | 原文 |
DIGEST_BASE64 | 摘要base64 |
DIGEST_HEX | 摘要hex |
# 三、响应参数
data 结果信息 | 类型 | 描述 |
---|---|---|
cert | String | 签名证书 (仅在配置时返回,多张证书以"\n"分隔) |
original | String | 原文数据 |
digest | String | 摘要数据 base64格式 注:此字段为 PKI 3.3.0版本 新增字段 |
verification | Integer | 验证信息 |
- 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+****w5o2u",
"cert":"MIICCTCC*****A8E3tYy1BmBs"
}
}
# 五、失败示例
JSON示例
{
"code":10205,
"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 signature = "MIAGCiqBHM9VBgEEAgKggDCAAgE*********0sf+DIbVZWG9A5JBQAAAAAAAA==";
String data = "签名数据";
P7VerifyRequest request = new P7VerifyRequest();
//设置模板id
request.setTemplateId("xxx");
// 签名值
request.setSignature(signature);
// 签名数据
request.setData(data);
//签名项目的值
request.setDataType(DataType.ORIGINAL);
// 签名是否包含原文
request.setAttach(false);
// 是否返回证书
request.setReturnCert(true);
try {
P7VerifyResponse response = client.execute(request);
// 后续业务
if (response.isSuccess()) {
System.out.println("成功响应:" + response.getBody());
} else {
System.out.println("失败响应:" + response.getBody());
}
} catch (ApiException e) {
e.printStackTrace();
}