# P7批量验证签名
对P7签名值进行批量验证
# 一、请求说明
- 请求地址:http://IP:PORT/openapi/svs/v1/sign/verify/p7/batch
- 服务接口名称(即公共参数method的值): sign/verify/p7/batch
- 请求方式:POST
# 二、请求参数
| 名称 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| templateId | String | 否 | 验证模板id |
| returnCert | Boolean | 否 | 响应中是否包含证书内容 |
| p7SignatureList | String | 是 | 签名值集合 |
| cert | String | 否 | 签名证书(base64)当签名值中不包含证书时,可用此参数 |
P7SignatureList 签名值集合 介绍 请使用JSON 方式传值 示例:
[{
"data": "123456",
"dataType": "ORIGINAL",
"signature": "MICAhcU***EAAAAAAAA",
"signatureDataType": "BASE64"
},
{
"data": "321",
"dataType": "ORIGINAL",
"signature": "MIAGCuA***AAAAAAA",
"signatureDataType": "BASE64"
}]
| 名称 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| data | String | 否 | 原文数据 |
| dataType | DataType | 否 | 原文数据格式 |
| signature | String | 是 | 签名值 |
| signatureDataType | DataType | 否 | 签名值数据格式 (base64,hex) 不传默认为base64 |
字段解释:
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");
当签名值为attached模式,无需填写原文数据和原文数据格式;
当签名值为detached模式,需要填写原文数据和原文数据格式;
- DataType 数据类型介绍
| 字段 | 类型介绍 |
|---|---|
| BASE64 | 原文BASE64 |
| HEX | 原文Hex |
| ORIGINAL | 原文 |
| DIGEST_BASE64 | 摘要base64 |
| DIGEST_HEX | 摘要hex |
# 三、响应参数
| data 结果信息 | 类型 | 描述 |
|---|---|---|
| result | Integer | 总体结果 0:表示全成功 |
| verifyResults | List<P7verifyResult> | 验证结果集合 |
List<P7verifyResult> 对象
| data 结果信息 | 类型 | 描述 |
|---|---|---|
| cert | String | 签名证书 |
| original | String | 原文数据 |
| digest | 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":10205,
"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);
P7VerifyBatchRequest request = new P7VerifyBatchRequest();
// 设置指定证书
request.setCert("-----BEGIN CERTIFICATE-----\n" +
"MIICQDCCAeegAwIBAgINALiXiKKh/hewQSXarDAKBggqgRzPVQGDdTBJMQswCQYD\n" +
"VQQGEwJDTjESMBAGA1UECAwJ5rGf6IuP55yBMRIwEAYDVQQHDAnljZfkuqzluIIx\n" +
"EjAQBgNVBAMMCXRlc3RTTTJDQTAeFw0yMjExMjkwMTIwMzdaFw0yMzExMjkwMTIw\n" +
"MzdaMFExCzAJBgNVBAYTAkNOMTAwLgYDVQQtDCc4NTlhNzUxZGZmOTc0MzczYWI2\n" +
"Y2VhZDJhMjc5NTljYjIwMjIxMTcxEDAOBgNVBAMMB3Rlc3R0dHQwWTATBgcqhkjO\n" +
"PQIBBggqgRzPVQGCLQNCAAQJMJEhx3xTncFdY+bGP/u5iPlgwF5kiOXjiUq1W/LS\n" +
"4SbwSOt+MuBdkDpnBS+w8aqz+FaKthBKl91UiBXyrZmDo4GrMIGoMAkGA1UdEwQC\n" +
"MAAwHQYDVR0OBBYEFIFcrV5xZRzW9l72QnGPSdnxAPQdMEsGA1UdJQEB/wRBMD8G\n" +
"CCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwQGCCsGAQUFBwMIBgorBgEEAYI3\n" +
"CgMDBglghkgBhvhCBAEwDgYDVR0PAQH/BAQDAgM4MB8GA1UdIwQYMBaAFBNxkUO4\n" +
"soMq8RYsZZQ2ekqljSYnMAoGCCqBHM9VAYN1A0cAMEQCIG0tfmIja08ruYGASYOb\n" +
"tZCSl47BlL7Y4e+B1alySBSTAiBXJPpCsvzyEwSY9gAtur4plkC6MAIhi4wv2zaU\n" +
"mMwXXQ==\n" +
"-----END CERTIFICATE-----\n");
ArrayList<P7VerifyBatchRequest.P7Signature> p7Signatures = new ArrayList<>();
//签名值对象1
P7VerifyBatchRequest.P7Signature p7Signature1 = new P7VerifyBatchRequest.P7Signature();
p7Signature1.setSignature("MIAGCiqBHM9VBgEEAgKggDCAAgEDMQ4wDAYIKoEcz1UBgxEFADCABgoqgRzPVQYBBAIBAACggDCCAhcwggG9oAMCAQICDQDEuillc8CChwJ+ee4wCgYIKoEcz1UBg3UwSTELMAkGA1UEBhMCQ04xEjAQBgNVBAgMCeaxn+iLj+ecgTESMBAGA1UEBwwJ5Y2X5Lqs5biCMRIwEAYDVQQDDAl0ZXN0U00yQ0EwHhcNMjIwNjA3MDkxNDAyWhcNMjMwNjA3MDkxNDAyWjBeMQswCQYDVQQGEwJDTjEwMC4GA1UELQwnMjlhY2VjYjgzNTRjNDY0ZmI5MGIzMmRiYzMwZWQ1OTEyMDIyMDY4MR0wGwYDVQQDDBRNYXRyaXggUEtJIFRTUyBUZXN0MTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABD9dnFKj6VDTTCg7n6l8FJANwPZjFODTpyeB2diSJlO3uWY38t3CTU0lhcIVnqX0Nr2Q4WPi5NPqdyUUSg5RH92jdTBzMAkGA1UdEwQCMAAwHQYDVR0OBBYEFHgkVz2SHJTgVwzjhZSNW/+OQW47MA4GA1UdDwEB/wQEAwIGwDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAfBgNVHSMEGDAWgBQTcZFDuLKDKvEWLGWUNnpKpY0mJzAKBggqgRzPVQGDdQNIADBFAiBvFIi2ba4jkFZJ17k8maoR0DmZqmfCdtmtPLorvcKIIAIhAJU+M/aZlg8YD60qsqJzMKbCIzHv4rb8+brseNTYM4zMAAAxggE1MIIBMQIBATBaMEkxCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmsZ/oi4/nnIExEjAQBgNVBAcMCeWNl+S6rOW4gjESMBAGA1UEAwwJdGVzdFNNMkNBAg0AxLopZXPAgocCfnnuMAwGCCqBHM9VAYMRBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yMjA2MDkwNzEyMDdaMC8GCSqGSIb3DQEJBDEiBCAgfPQQUy+SpH3uJFzpsR/3H1eOvXY+s7vqROvQQ9AY+zANBgkqgRzPVQGCLQEFAARIMEYCIQCD6gUt9xNPR4NPbQvZF+iSszG/F65DT684w7aluOvoMAIhAK/cACK7Jf7vVyj8T4nHeTgaCa5VE6+n+b8n8sw7z4S5AAAAAAAA");
p7Signature1.setData("123456");
p7Signature1.setDataType(DataType.ORIGINAL);
p7Signatures.add(p7Signature1);
//签名值对象2
P7VerifyBatchRequest.P7Signature p7Signature2 = new P7VerifyBatchRequest.P7Signature();
p7Signature2.setSignature("MIAGCiqBHM9VBgEEAgKggDCAAgEDMQ4wDAYIKoEcz1UBgxEFADCABgoqgRzPVQYBBAIBAACggDCCAmswggISoAMCAQICDQCT0vDryDrhJKUCW4EwCgYIKoEcz1UBg3UwIDELMAkGA1UEBhMCQ04xETAPBgNVBAMMCEdaVEVTVENBMB4XDTIzMDMwNzExNDQwM1oXDTI0MDMwNzExNDQwM1owgZMxCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnljJfkuqzluIIxEjAQBgNVBAcMCeWMl+S6rOW4gjEKMAgGA1UECgwBMTEPMA0GA1UECwwG5rWL6K+VMSkwJwYDVQQtDCA3YjI0MDU3MTk1ZjM0Y2UwYTMzMGQyNDA0OTY3ZjJmNDEUMBIGA1UEAwwLMTcyLjE2LjYuMzQwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAS4rDnkwwNHWJhiDGw0MZPmWgYMMipBe6ezHBkCA10de+cPdwwRSajfWQcpAH0tdbYc9AcRJFX0pN+VhojLGK1Mo4G8MIG5MAkGA1UdEwQCMAAwHQYDVR0OBBYEFIiZ4F/OkvMwU7PAomLq4mT64pi8MEsGA1UdJQEB/wRBMD8GCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwQGCCsGAQUFBwMIBgorBgEEAYI3CgMDBglghkgBhvhCBAEwDwYDVR0RBAgwBocErBAGIjAfBgNVHSMEGDAWgBTW7UXUvKIJIuDrNX5vq5Z9CDhIPTAOBgNVHQ8BAf8EBAMCA/gwCgYIKoEcz1UBg3UDRwAwRAIgGCoJysOt0W8kiGpeU95Og/MTQQr61JEzieG9JTwWbQgCIDjlXGJ/jDdg9MTlWHjGlSpgIW8SMv7zN+bYIN2ps5yLAAAxggELMIIBBwIBATAxMCAxCzAJBgNVBAYTAkNOMREwDwYDVQQDDAhHWlRFU1RDQQINAJPS8OvIOuEkpQJbgTAMBggqgRzPVQGDEQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjMwMzA5MDg1MzMwWjAvBgkqhkiG9w0BCQQxIgQg/DboVXc+/+fESrU2H8vtftYp91zFAmH11DqcgzXqi7AwDQYJKoEcz1UBgi0BBQAERzBFAiAzt99qaWainzKpWVufi5DPKZ5vNSqX6OonchU3EdsErgIhALV3uM1gQ0CpaMSSoRbmefcV5nzIUKSfpIiaMFNaYlyuAAAAAAAA");
p7Signature2.setData("321");
p7Signature2.setDataType(DataType.ORIGINAL);
p7Signatures.add(p7Signature2);
//设置签名值集合
request.setP7SignatureList(p7Signatures);
//是否返回证书
request.setReturnCert(false);
try {
P7VerifyBatchResponse response = pkiClient.execute(request);
// 后续业务
if (response.isSuccess()) {
System.out.println("成功响应:" + response.getBody());
} else {
System.out.println("失败响应:" + response.getBody());
}
} catch (ApiException e) {
e.printStackTrace();
}