无法在Adobe Reader中获取嵌入式OCSP验证

时间:2017-06-17 19:32:53

标签: pdf bouncycastle pdfbox sign ocsp

我正在与Bouncy Castle签署PDF并在PKCS7中嵌入OCSP响应。我用PDFBox组装了签名的PDF,但我不能在我的生活中获得在Adobe Reader中正确验证的结果文件(OCSP无法识别)。由于OCSP响应者需要签名请求,因此我必须将响应嵌入文件中。

如果有人会有任何指示,那将非常感激。

我认为查看实际签名/证书/ OCSP比我的代码更容易。签名PDF可在此处获取:

https://drive.google.com/open?id=0B_TaSaQW0YXteUgtbUlEa0NhcGc

Base64编码的签名就在这里:

https://drive.google.com/open?id=0B_TaSaQW0YXtaEtPczRROTg4UDA

修改

当我在Adobe Reader中查看证书时,请检查撤销>遇到的问题,它说:

Certificate is not valid for the usage. Must sign the request.

撤销部分还说:

An attempt was made to determine whether the certificate is valid by doing 
a revocation check using the Online Certificate Status Protocol (OCSP).

所以似乎完全跳过了嵌入式OCSP。

编辑2:

根据mkl的建议,我通过更改以下行更新了 nonce -extension:

DEROctetString extValue = new DEROctetString(nonce);

对此:

DEROctetString extValue = new DEROctetString(new DEROctetString(nonce)));

导致以下DER结构:

[1] (1 elem)
  SEQUENCE (1 elem)
    SEQUENCE (2 elem)
      OBJECT IDENTIFIER 1.3.6.1.5.5.7.48.1.2ocspNonce(OCSP)
      OCTET STRING (1 elem)
        OCTET STRING IKhVULz41m7JWTa4swZXJPBm6Zs=

但我仍然在Adobe Reader中收到相同的错误消息。我附上了更新的文档和base64编码的签名:

https://drive.google.com/open?id=0B_TaSaQW0YXtVjNqRWlxbXg4T0U https://drive.google.com/open?id=0B_TaSaQW0YXtNC1CblZlUHV4dGs

编辑3:

我将该文件与没有嵌入式OCSP响应的其他版本进行了比较,并在Adobe Reader中遇到遇到的问题时出现此错误:

Must sign the request.

让我相信初始错误的第一部分确实来自于尝试验证嵌入式OCSP响应:

Certificate is not valid for the usage. 

我猜有问题的证书将是OCSP响应的签名证书。我自己的文档使用以下证书结构签名:

Root CA -> Bank (on EU Trust List) -> My Company

OCSP签署了以下结构:

Root CA -> External company (cert marked for OCSP signing)

文档签名链中的中间证书是否使OCSP签名无效?或者我可以以某种方式包含缺少证书链的部分以使其验证?或者这可能不是问题?

1 个答案:

答案 0 :(得分:1)

OCSP Nonce编码

OCSP响应中的 nonce 扩展名编码如下:

3405   45:                                   [1] {
3407   43:                                     SEQUENCE {
3409   41:                                       SEQUENCE {
3411    9:                                         OBJECT IDENTIFIER
         :                                           ocspNonce (1 3 6 1 5 5 7 48 1 2)
3422   28:                                         OCTET STRING 'EZrf5DVM/y1QFGUfydwBSOsxZ6s='
         :                                         }
         :                                       }
         :                                     }

这很可能与您在请求中发送的 nonce 扩展相对应。

但请记住,根据定义,扩展的值包含在OCTET STRING中。因此,您的实际 nonce 值是由字符EZrf5DVM/y1QFGUfydwBSOsxZ6s=的ASCII值给出的字节序列,即就ASN.1而言完全无类型的内容。

但RFC 6960 为nonce扩展指定了RFC 2560中缺少的ASN.1语法...

Nonce ::= OCTET STRING

(RFC 6960第1和4.4.1节)

因此,就ASN.1而言,你的nonce值必须是OCTET STRING而不是无类型。

因此,请尝试将您为 nonce 选择的值包装在OCTET STREAM中(然后根据Extension定义将其包含在另一个OCTET STREAM中)

所有证书的撤销信息

为了在没有额外撤销信息请求的情况下使验证成功,签名必须带来所有涉及的证书的吊销信息,但(可信)根证书和相应标记的其他证书除外。

因此,您不仅需要签名者证书和中间银行证书的撤销信息,还需要嵌入式OCSP响应的OCSP证书(除非他们具有id-pkix-ocsp-nocheck扩展名)。

如果我正确读取了ASN.1转储,则您的案例中的OCSP证书没有该扩展名。因此,Adobe Reader将尝试在线接收撤销信息,如果不起作用,则不会使用您的嵌入式OCSP响应。

OCSP服务TLS证书

由于您的签名未带来所有必需的撤销信息。 Adobe Reader尝试在线接收它们。这样做会导致错误。

我得到的详细错误信息是

  

证书不适用于____________________________________________________________

     

证书不适用于____________________________________________________________

     

SSL证书错误。

事实上,尝试手动访问https://va1.bankid.no/(OCSP服务器的URL),我也被告知了证书问题。

您似乎遇到了不同的错误。您是否在计算机或Adobe Reader中安装并信任某些特殊证书?