openSSL验证使用自签名证书签名的RFC 3161 TimeStampResp



我使用openSSL从RFC 3161 TimeStampReq生成了一个RFC 3161 TimeStampResp。因此,我使用了自签名CA证书和TSA证书,由自签名CA使用以下命令颁发:

openssl ts -reply -queryfile request.tsq -signer TSAcert.pem -out response.tsr

响应已创建。

openssl ts -reply -text -in response.tsr

生成以下输出:

状态信息:
状态:已授予
状态描述:未指定
失败信息:未指定
TST信息:
版本:1
策略OID:tsa_policy1
Hash算法:sha256
消息数据:
0000-43 2c bb 03 28 48 42 06-c0 c8 95 ee d8 32 9d 29 C,。。(HB……2.(
0010-09 7c 10为68 2a 77 f6-6e 96 61 7c bf 8f e2 cd。。h*w.n.a|….
序列号:0x01
时间戳:2018年8月1日13:40:03 GMT
精度:0x01秒,0x01F4毫秒,0x64微米
排序:是
非:未指定
TSA:DirName:/C=stuff/ST=某些状态/L=stuff/O=stuff/CN=stuff
扩展:

当我试图使用以下命令根据TimeStampReq验证TimeStampResp时:

openssl ts -verify -queryfile request.tsq -in response.tsr -CAfile CAcert.pem -untrusted TSAcert.pem

我收到一条错误消息,说我的CAcert是自签名的(实际上是真的(

验证:失败
139727615005120:错误:2F06D064:时间戳例程:ts_verify_cert:证书验证错误:/crypto/ts/ts_rsp_verify.c:182:验证错误:自签名证书

是否有任何方法可以跳过证书验证或告诉openSSL此CA可以信任?

首先,这并不是一个真正的编程或开发问题,很可能属于超级用户unix。SX,或者可能是安全性。SX。

其次,如果我在所有最新发布的版本(1.0.0-2,1.1.0(中用你遗漏或编辑的信息的"明显"默认值重建你描述的情况,这对我来说是有效的(验证是否正确(。我所能建议的是,仔细查看你的证书中到底有什么。一个明显的可能性是:你是否将TSA名称(cert-Subject(与CA名称相同?这会导致链接失败,从而导致所得到的验证错误类型。

第三,openssl ts -verify中除了正常的验证序列之外没有其他选项。但一个成功的TimeStampResp只是一个SEQUENCE,它包含一个简单的头(一个包含INTEGER 0的子SEQUEQUENCE(和一个CMS SignedData,它是时间戳令牌。你可以提取CMS SignedData部分——用openssl asn1parse -inform d手动找到它的偏移量,通常是9,然后添加-strparse 9 -out signedtst,或者只是一些简单的东西,比如tail -c +10 <tsresp >signedtst(添加(,或者更容易地使用我以前不知怎么错过的选项:openssl ts -reply -in response -token_out -out signedtst——然后使用

openssl cms -verify -noverify -certfile signercert -inform der -in signedtst -binary -out tstinfo

(是的-verify -noverify!(由证书(即TSA(验证签名数据上的签名,但不验证证书本身(针对信任库中结束的链,以及所需的ExtKeyUsage,加上OpenSSL的-purpose timestampsign也约束KeyUsage(尽管我在标准中没有看到这一点(,还提取签名主体,然后可以使用手动解析

openssl asn1parse -inform der -in tstinfo [-i]

尽管这不如为您标记和格式化它那么方便。

添加:1.1.0中有一些添加的选项,我显然错过了;看见https://stackoverflow.com/a/52134401/2868801

相关内容

  • 没有找到相关文章

最新更新