我有一个SOAP
请求,需要重新设计,因为SoapUI
无法正确处理二进制响应。
我决定让它基于Java。我发现this非常有用,但不确定,代码片段中的函数是如何产生的。我有
在SOAP
请求中定义,并且不确定如何转换这些信息以将请求发送到我的tsendpint。
我也尝试了TSAClientBouncyCastle,但不确定为什么我们需要登录凭据。我把这些字段留空,但它一直用
TSAClientBouncyCastle @ 1f0e140b
消息。
我使用构造函数从TSAClientBouncyCastle
调用Main
类。
它是主要部分,它应该解码数据。
// Get TSA response as a byte array
InputStream inp = tsaConnection.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = inp.read(buffer, 0, buffer.length)) >= 0) {
baos.write(buffer, 0, bytesRead);
}
byte[] respBytes = baos.toByteArray();
String encoding = tsaConnection.getContentEncoding();
if (encoding != null && encoding.equalsIgnoreCase("base64")) {
respBytes = Base64.decode(new String(respBytes));
}
答案 0 :(得分:1)
时间戳管理局(TSA)生成证据,证明在特定时间之前存在数据。它使用RFC3161中定义的协议和格式。
时间戳响应如下(见RFC3161-section 2.4.2):
TimeStampResp ::= SEQUENCE {
status PKIStatusInfo,
timeStampToken TimeStampToken OPTIONAL }
您可以使用BouncyCastle解析内容类型application/timestamp-reply
的回复,以获取PKIStatusInfo
TimeStampResponse response = new TimeStampResponse(tsaInputStream);
int status = response.getStatus();
可能的值是
PKIStatus ::= INTEGER {
granted (0),
-- when the PKIStatus contains the value zero a TimeStampToken, as
requested, is present.
grantedWithMods (1),
-- when the PKIStatus contains the value one a TimeStampToken,
with modifications, is present.
rejection (2),
waiting (3),
revocationWarning (4),
-- this message contains a warning that a revocation is
-- imminent
revocationNotification (5)
-- notification that a revocation has occurred }