# P1签名

用户对某数据进行P1签名操作

# 一、请求说明

  • 请求地址:http://IP:PORT/openapi/ces/v1/sign/p1
  • 服务接口名称(即公共参数method的值): sign/p1
  • 请求方式:POST

# 二、请求参数

名称 类型 是否必须 描述
signType CertSearchEnum 签名方式
signItemValue String 签名方式的值(若选中证书ID则传证书ID,若选密钥索引则传密钥索引)
data String 待签名数据(原文、原文base64、原文hex、摘要base64、摘要hex)
dataType DataType 待签名数据格式
signatureAlgorithm SignatureAlgorithm 签名算法:SM2证书签名算法为SM3withSM2,RSA默认为SHA256withRSA
signDataType DataType 签名后数据格式 (base64、hex)

注:当待签名数据格式为摘要base64或摘要hex时,注意摘要长度应与签名算法对应。具体算法的摘要长度见签名算法字段解释。

  • 字段解释

  • CertSearchEnum 签名方式

类型字段 介绍
CERT 证书
CERT_ID 证书ID
KEY_INDEX 密钥索引(选用密钥索引方式仅可使用拥有者不为证书的密钥索引)
SN_HEX 证书序列号(十六进制格式)
SN_DEC 证书序列号(十进制格式)
TN_HASH 证书指纹
CERT_CN 证书持有者
CERT_DN 证书主题项
  • DataType 数据类型介绍

生成摘要的摘要算法和接口中的签名算法保持一致。

字段 类型介绍
BASE64 原文BASE64
HEX 原文Hex
ORIGINAL 原文
DIGEST_BASE64 摘要base64
DIGEST_HEX 摘要hex
ASN1_BASE64 ASN.1格式BASE64  注:此类型为PKI3.4.5版本新增 SM2证书不支持
ASN1_HEX ASN.1格式HEX  注:此类型为PKI3.4.5版本新增 SM2证书不支持
  • SignatureAlgorithm 签名算法介绍
类型字段 介绍
SM3withSM2 SM3withSM2签名算法(摘要长度应为32字节)
SHA1withRSA SHA1withRSA签名算法(摘要长度应为20字节)
SHA256withRSA SHA256withRSA签名算法(摘要长度应为32字节)
SHA512withRSA SHA512withRSA签名算法(摘要长度应为64字节)

# 三、响应参数

data 结果信息 类型 描述
signData String 签名结果
verification Integer 验证信息状态码
message String 验证提示信息
  • verification 返回码介绍
字段 状态码 状态介绍
SUCCESS 0 验证成功
CERT_NOT_EXIST 8 证书不存在
CES_KEYPAIR_NOT_EXIST 20 密钥不存在或状态异常
CES_KEYPAIR_OPER_NOT_SUPPORTED 21 密钥不支持此操作

# 四、成功示例

JSON示例

{
    "code":0,
    "message":"success",
    "requestId":"xxx",
    "data":{
        "verification":0,
        "message":"success",
        "signData":"BMY18jZgCLgQ1Jp9rbmQbEo+Pj6vsd7L6+z......"
    }
}

# 五、失败示例

JSON示例

{
    "code": 10023,
    "requestId":"xxx",
    "message": "App被限流",
}

# 六、SDK请求示例

        // 提供的URL
        String url = "http://172.16.3.232:20501";

        // 您的appKey
        String appKey = "XXX";

        // 您的appSecret
        String appSecret = "XXX";

        // 1.原客户端
        PkiClient client = new PkiOkhttpClient(url, appKey, appSecret);

        String data = "签名数据";

        P1SignRequest request = new P1SignRequest();

        //通过何种方式进行签名 CERT:证书,CERT_ID:证书ID,KEY_INDEX:密钥索引,
        // SN_HEX:证书序列号(十六进制格式),SN_DEC:证书序列号(十进制格式),
        // TN_HASH:证书证书指纹,CERT_CN:证书CN项,CERT_DN:证书主题项
        request.setSignType(CertSearchEnum.CERT_ID);
        //签名项目的值
        request.setSignItemValue("");
        // 签名数据
        request.setData(data);
        //签名项目的值
        request.setDataType(DataType.BASE64);
        // 签名算法:SM2证书签名算法为SM3withSM2,RSA默认为SHA256withRSA
        request.setSignatureAlgorithm(SignatureAlgorithm.SHA1withRSA);
        // 签名后数据格式
        request.setSignDataType(DataType.BASE64);
        try {
            P1SignResponse response = client.execute(request);
            // 后续业务
            if (response.isSuccess()) {
                System.out.println("成功响应:" + response.getResult());
                P1SignResponse.Result result = response.getResult();
                System.out.println("签名结果: "+result.getSignData());
                System.out.println("验证信息状态码: "+result.getVerification());
                System.out.println("验证提示信息: "+result.getMessage());
            } else {
                System.out.println("失败响应:" + response.getBody());
            }
        } catch (ApiException e) {
            e.printStackTrace();
        }

通过P1SignRequest请求体设置P1签名请求参数,再通过PKI客户端执行请求。

最后更新于: 6/6/2023, 10:01:52 AM