我正在与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签名无效?或者我可以以某种方式包含缺少证书链的部分以使其验证?或者这可能不是问题?
答案 0 :(得分:1)
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响应。
由于您的签名未带来所有必需的撤销信息。 Adobe Reader尝试在线接收它们。这样做会导致错误。
我得到的详细错误信息是
证书不适用于____________________________________________________________
证书不适用于____________________________________________________________
SSL证书错误。
事实上,尝试手动访问https://va1.bankid.no/(OCSP服务器的URL),我也被告知了证书问题。
您似乎遇到了不同的错误。您是否在计算机或Adobe Reader中安装并信任某些特殊证书?