我正在使用 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 中遇到的 Prolems中得到了这个错误:
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 签名无效?或者我可以以某种方式包含证书链的缺失部分以使其验证吗?或者这可能不是问题?