1

我正在测试一个 RFC 3161 Timestamp Server,我正在使用 Foxit Reader、Xolido Sign Desktop 和 Adob​​e Acrobat Pro DC 来为 PDF 添加时间戳。我可以使用 Foxit Reader 和 Xolido 制作时间戳,但 Adob​​e Acrobat 会返回“Error durante la Firma。El nombre TSA 不重合”,类似于“签名错误。TSA 名称不匹配”。我已经搜索并且 Adob​​e config 中的 TSA 服务器名称是您想要的,我已经用证书的主题进行了测试,只是公用名等。服务器在时间戳响应中将证书主题作为 TSA 名称返回,但它似乎是好的。我不知道为什么 Adob​​e 会这么说,而 Foxit 和 Xolido 都可以。

我在验证时间戳后添加了一个 FoxitReader 屏幕。

福昕阅读器对话框显示“签名有效。由 TimestampTest 签名。文档自签名后未被修改。签名是来自安全时间等的文档时间戳。”

使用 Foxit Reader 的 PDF 时间戳示例

4

1 回答 1

1

好吧,我终于解决了这个问题。我使用 OpenSSL 发现了相同的“tsa 名称不匹配”错误,并阅读了 OpenSSL 源代码,我看到它是时间戳令牌中 TSA 名称和证书主题之间的本地比较。我的服务器正在使用 BouncyCastle,当您从 X500 主题创建 TSAName 时,由于“标准事物”,它会反转主题 RDN(例如,它交换 C=Foo、O=SomeOrg 等),因为 TSA 名称是 GeneralName 对象而不是 X500Name 对象。

我反转主题,然后创建令牌 TSA 名称,现在 Openssl 和 Adob​​e 都验证正常。

在我现在拥有的服务器中:

tsTokenGen.setTSA(new GeneralName(reverseX500Name(new X500Name(tsuName))));

public static X500Name reverseX500Name(final X500Name name) {
    RDN[] orig = name.getRDNs();
    int n = orig.length;
    RDN[] _new = new RDN[n];
    for (int i = 0; i < n; i++) {
        _new[i] = orig[n - 1 - i];
    }
    return new X500Name(_new);
}

OpenSSL 等效错误是 INT_TS_RESP_VERIFY_TOKEN,它可以在 ts_rsp_verify.c 第 459 行(相对于 OpenSSL 版本的行)中抛出错误。

于 2017-10-09T12:15:51.297 回答