# 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();
        }
最后更新于: 6/9/2023, 10:58:46 AM