密码中台TSS服务API接口文档

签发时间戳

签发时间戳证书。

一、请求参数

名称 类型 是否必须 描述
dataType DataType 原文数据类型
algo DegistEnum 时间戳摘要算法(SM2为SM3,RSA为SHA256和SHA1)
data String 原文数据
signType CertSearchEnum 签名方式
signItemValue String 签名方式的值
includeCert Boolean 时间戳中是否包含证书,true:包含,false:不包含
注意:先安请求只需要dataType,algo,data三个参数。
字段 类型介绍
SHA1 SHA1算法
SM3 SM3算法
SHA256 SHA256算法
注意:先安请求,当数据类型为摘要时algo支持SM3,SHA256;数据类型为原文时支持所有类型。
字段 类型介绍
BASE64 原文BASE64
HEX 原文Hex
ORIGINAL 原文
DIGEST_BASE64 摘要base64
DIGEST_HEX 摘要16进制HEX
注意:先安请求dataType支持ORIGINAL,DIGEST_BASE64。
类型字段 类型介绍
CERT 证书
CERT_ID 证书ID
KEY_INDEX 密钥索引
SN_HEX 证书序列号(十六进制格式)
SN_DEC 证书序列号(十进制格式)
TN_HASH 证书证书指纹
CERT_CN 证书CN项
CERT_DN 证书主题项
注意:对应的证书ID需要对应的摘要算法。仅先安支持密钥索引。

二、响应参数

result 结果信息 类型 描述
tsa String 时间戳response Base64
signerSn String 序列
signerDn String 签发证书主题项
genTime Date 时间戳生成时间

三、响应示例

成功示例

{
"code": 0,
"message": "success",
"requestId": "LLxcLn5IOH",
"data": {
"incorrect": "0",
"tsa": "MIIEwTADAgEAMIIEuAYJKoZIhvcNAQcCoIIEqTCCBKUCAQMxCzAJBgUrDgMCGgUAMIHxBgsqhkiG9w0BCRABBKCB4QSB3jCB2wIBAQYIKoEchvAAEAEwMDAMBggqgRzPVQGDEQUABCBuD54UNExUBqDPWjtN+2Zfh/SncaMfftu1xyh0oyspVwIJAJyliFVwMuAxGBYyMDIyMDYyMzA1MjUzNy42MzQyMTlaAgkAsIgXgDK7RVCgbKRqMGgxCzAJBgNVBAYTAkNOMQ0wCwYDVQQIHgRsX4LPMQ0wCwYDVQQHHgRTV06sMRAwDgYDVQQKEwdTbWFydENBMRQwEgYDVQQLEwtTbWFydENBIFRTQTETMBEGA1UEAxMKVFNBMS1UZXN0MaCCAjYwggIyMIIB2KADAgECAg0A7bffVdPm6ecDmCWEMAoGCCqBHM9VAYN1MFoxCzAJBgNVBAYTAkNOMQ0wCwYDVQQIHgRsX4LPMQ0wCwYDVQQHHgRTV06sMRAwDgYDVQQKEwdTbWFydENBMRswGQYDVQQDExJTbWFydENBIFNNMiBUU0EgQ0EwHhcNMTkwNzI1MDU1NDQ0WhcNMjQwODI1MDU1NDQ0WjBoMQswCQYDVQQGEwJDTjENMAsGA1UECB4EbF+CzzENMAsGA1UEBx4EU1dOrDEQMA4GA1UEChMHU21hcnRDQTEUMBIGA1UECxMLU21hcnRDQSBUU0ExEzARBgNVBAMTClRTQTEtVGVzdDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAATKPnTtqEynB8M/AeiQPsrze9COf5bUgAYPSSLiMa04tk8os1lLLgrTczhEyZqnvnAQK8qkZM0Aa3EKjqCqXrHzo3UwczAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBSzvXA//vr0zDCLObCJwdume4vP+zAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAfBgNVHSMEGDAWgBSERTdEtn8DNQl+h8wAaQ+2x5VB5TALBgNVHQ8EBAMCAYYwCgYIKoEcz1UBg3UDSAAwRQIhAOa7vwYaaxC6Ow3rQmr1NtSUow8Q1Ry4nKHWg5fpEezeAiAtIQBAmWeWQ9r58SDrkk32x6W+dN2VUcjkGwxMI8gC8jGCAWMwggFfAgEBMGswWjELMAkGA1UEBhMCQ04xDTALBgNVBAgeBGxfgs8xDTALBgNVBAceBFNXTqwxEDAOBgNVBAoTB1NtYXJ0Q0ExGzAZBgNVBAMTElNtYXJ0Q0EgU00yIFRTQSBDQQINAO2331XT5unnA5glhDAJBgUrDgMCGgUAoIGMMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjIwNjIzMDUyNTM3WjAjBgkqhkiG9w0BCQQxFgQU31zgNBCWWUX0jG1ma8xRhCO6CMEwKwYLKoZIhvcNAQkQAgwxHDAaMBgwFgQUsRJeovQitNZbii479QeTuYBDSycwCQYHKoZIzj0EAQRIMEYCIQCf++c/dadQDVAJy1YgHc5J3exLSG0b9jC3vLgjf6emFgIhALmpzpvAOBrtN3ZQC+eVh1yVIQYOsCQN40j/GMWDMP7s",
"signerSn": "edb7df55d3e6e9e703982584",
"genTime": Mon Aug 29 10:38:32 CST 2022,
"signerDn": "C=CN,ST=江苏,L=南京,O=SmartCA,OU=SmartCA TSA,CN=TSA1-Test1",
},
"success": true
}

失败示例

{
"code": 30201104,
"message": "签发时间戳证书失败:BAD_PARAM 参数错误",
"requestId": "GrfjFOkbfx",
"data": null,
"success": false
}

SDK请求示例

  @Test
public void issue() throws Exception {
//您的url
String url = "http://172.16.3.128:30240/rest/cip/kitty/%s/sop";
//您的appKey
String appKey = "w8MuGC9C";
//您的appSecret
String secretKey = "4wVznIMB";
//构造接口实例D
ApiClient apiClient = new DefaultApiClient(url, appKey, secretKey);
// 实例化接口
TssSopApi tssSopApi = new TssSopApiImpl(apiClient);

TssGenerateRequest tssRequest = new TssGenerateRequest();

String data = "bg+eFDRMVAagz1o7TftmX4f0p3GjH37btccodKMrKVc=";
// String data = "123";
//数据类型
tssRequest.setDataType(DataType.DIGEST_BASE64);
//数据
tssRequest.setData(data);
//时间戳摘要算法
tssRequest.setAlgo(DegistEnum.SM3);
//通过何种方式进行签名
tssRequest.setSignType(CertSearchEnum.CERT_ID);
//签名项目的值
tssRequest.setSignItemValue("62a7f15292c702164b99bc74");
//时间戳中是否包含证书,true:包含,false:不包含
tssRequest.setIncludeCert(Boolean.TRUE);
TssGenerateResponse response = tssSopApi.issue(tssRequest);
//后续业务处理
System.out.println("================================");
System.out.println("响应内容:" + response);
System.out.println("================================");
System.out.println("SDK请求ID:" + response.getRequestId());
System.out.println("SDK响应消息:" + response.getMsg());
System.out.println("SDK响应码:" + response.getErrorCode());
System.out.println("================================");
if (null != response.getResult()) {
System.out.println("tsa:" + response.getResult().getTsa());
System.out.println("SignerDn:" + response.getResult().getSignerDn());
System.out.println("SignerSn:" + response.getResult().getSignerSn());
System.out.println("GenTime:" + response.getResult().getGenTime());
}
}

验证时间戳

验证时间戳。

一、请求参数

名称 类型 是否必须 描述
data String 原文数据
tsa String 时间戳(base64)
dataType DataType 原文数据类型
注意:先安请求只需要tsa参数。
字段 类型介绍
BASE64 原文BASE64
HEX 原文Hex
ORIGINAL 原文
DIGEST_BASE64 摘要base64
DIGEST_HEX 摘要16进制HEX

二、响应参数

result 结果信息 类型 描述
verification Integer 验证结果 0-成功 其他-失败 详见失败信息
message String 验证失败的描述
signer String 签发者
signerDn String 签发证书主题项
genTime Date 时间戳加盖时间
字段 状态码 状态介绍
SUCCESS 0 验证成功
CERT_EXPIRED 1 证书已过期
CERT_INEFFECTIVE 2 证书未生效
CERT_USAGE_DEFICIENCY 3 证书密钥用法错误
CERT_OU_MISMATCHING 4 证书OU项不匹配
CERT_REVOKED 5 证书已注销
CERT_UNTRUSTED 6 证书不可信
SIGN_INVALID 7 数字签名验证不通过

三、请求响应示例

成功示例

{
"code": 0,
"message": "success",
"requestId": "h19BP43xWL",
"data": {
"incorrect": "0",
"verification": 0,
"message": "success",
"signer": "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",
"signerDn": "C=CN,ST=江苏,L=南京,O=SmartCA,OU=TEST,CN=SmartCA RSA TEST TSA1",
"genTime": 1655196215535,
},
"success": true
}

失败示例

{
"code": 30201104,
"message": "验证时间戳证书失败: BAD_PARAM 参数错误",
"requestId": "aLBZPecN2e",
"data": null,
"success": false
}

SDK请求示例

 @Test
public void tssv() throws Exception {
//您的url
String url = "http://172.16.3.128:30240/rest/cip/kitty/%s/sop";
//您的appKey
String appKey = "w8MuGC9C";
//您的appSecret
String secretKey = "4wVznIMB";
//构造接口实例D
ApiClient apiClient = new DefaultApiClient(url, appKey, secretKey);
// 实例化接口
TssSopApi tssSopApi = new TssSopApiImpl(apiClient);

TssVerifyRequest request = new TssVerifyRequest();
//原始数据
request.setData("123");
//数据类型
request.setDataType(DataType.ORIGINAL);
//时间戳(base64)
//pki参数
String pkiStr = "MIICqDAVAgEAMBAMDk9wZXJhdGlvbiBPa2F5MIICjQYKKoEcz1UGAQQCAqCCAn0wggJ5AgEDMQwwCgYIKoEcz1UBgxEwgdYGCyqGSIb3DQEJEAEEoIHGBIHDMIHAAgEBBggqgRyG8AAQATAwMAwGCCqBHM9VAYMRBQAEIG4PnhQ0TFQGoM9aO037Zl+H9Kdxox9+27XHKHSjKylXAgx2Gqld7X4iLkJUPuUYDzIwMjIwNjE1MDgyMzQ5WgIMB+i5bPGvDADlLhMUoFKkUDBOMQswCQYDVQQGEwJDTjEwMC4GA1UELQwnOGNjNDNhMDk1MTE3NGZiMzliNWU3ZGVjMzFmZjVmNWMyMDIyMDY4MQ0wCwYDVQQDDAR0c3NhMYIBizCCAYcCAQEwWjBJMQswCQYDVQQGEwJDTjESMBAGA1UECAwJ5rGf6IuP55yBMRIwEAYDVQQHDAnljZfkuqzluIIxEjAQBgNVBAMMCXRlc3RTTTJDQQINAO5V4jN6fHLDY6vqDjAKBggqgRzPVQGDEaCBwjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIyMDYxNTA4MjM0OVowKAYJKoZIhvcNAQk0MRswGTAKBggqgRzPVQGDEaELBgkqgRzPVQGCLQEwKwYLKoZIhvcNAQkQAgwxHDAaMBgwFgQUHaXDpKJR9yR55NP8zUaRtqfAD7AwLwYJKoZIhvcNAQkEMSIEIIwaJloMGs7LfUsV6g0F4wSqZUoFo+LKK1Qsm4e8v6zRMAsGCSqBHM9VAYItAQRIMEYCIQDxKkYvimsAuHoQvZyFba5LD3Ylp7owQbkR7RKyja38cwIhAMHBMCgH+g1WWkwaBoDtcqO371mGPi43vDQ9FXzuUY8l";
request.setTsa(pkiStr);
TssVerifyResponse response = tssSopApi.tssv(request);
//后续业务处理
System.out.println("================================");
System.out.println("响应内容:" + response);
System.out.println("================================");
System.out.println("SDK请求ID:" + response.getRequestId());
System.out.println("SDK响应消息:" + response.getMsg());
System.out.println("SDK响应码:" + response.getErrorCode());
System.out.println("================================");
if (null != response.getResult()) {
System.out.println("message:" + response.getResult().getMessage());
System.out.println("SignerDn:" + response.getResult().getSignerDn());
System.out.println("Signer:" + response.getResult().getSigner());
System.out.println("GenTime:" + response.getResult().getGenTime());
System.out.println("Verification:" + response.getResult().getVerification());
}
}