Pdf 无法在Adobe Reader中获取要验证的嵌入式OCSP
我正在用Bouncy Castle签署一份PDF,并在PKCS7中嵌入一个OCSP响应。我用PDFBox组装了签名的PDF,但我无法在Adobe Reader中正确验证生成的文件,因为OCSP无法识别。由于OCSP响应程序需要签名请求,因此我必须将响应嵌入文件中 如果有人能提出任何建议,我将不胜感激 我认为查看实际签名/证书/OCSP比查看代码更容易。已签名的PDF可在以下位置获得: Base64编码的签名如下: 编辑: 当我在Adobe Reader中查看证书并检查吊销>遇到的问题时,它会显示:Pdf 无法在Adobe Reader中获取要验证的嵌入式OCSP,pdf,bouncycastle,pdfbox,sign,ocsp,Pdf,Bouncycastle,Pdfbox,Sign,Ocsp,我正在用Bouncy Castle签署一份PDF,并在PKCS7中嵌入一个OCSP响应。我用PDFBox组装了签名的PDF,但我无法在Adobe Reader中正确验证生成的文件,因为OCSP无法识别。由于OCSP响应程序需要签名请求,因此我必须将响应嵌入文件中 如果有人能提出任何建议,我将不胜感激 我认为查看实际签名/证书/OCSP比查看代码更容易。已签名的PDF可在以下位置获得: Base64编码的签名如下: 编辑: 当我在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扩展:
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=
Root CA -> Bank (on EU Trust List) -> My Company
Root CA -> External company (cert marked for OCSP signing)
但我仍然在AdobeReader中收到相同的错误消息。我已附上更新的文件和base64编码签名:
编辑3:
我将该文件与另一个没有嵌入OCSP响应的版本进行了比较,在Adobe Reader中遇到的Prolems中发现了以下错误:
Must sign the request.
这让我相信,最初错误的第一部分确实是因为试图验证嵌入式OCSP响应:
Certificate is not valid for the usage.
我猜有问题的证书将是OCSP响应的签名证书。我自己的文档使用以下证书结构签名:
[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=
Root CA -> Bank (on EU Trust List) -> My Company
Root CA -> External company (cert marked for OCSP signing)
OCSP采用以下结构签署:
[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=
Root CA -> Bank (on EU Trust List) -> My Company
Root CA -> External company (cert marked for OCSP signing)
文档签名链中的中间证书是否使OCSP签名无效?或者,我可以以某种方式包括证书链的缺失部分,以使其生效吗?或者这可能不是问题所在?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扩展名
不过,请记住,扩展名的值根据定义包装在八位字节字符串中。因此,实际的nonce值是由字符EZrf5DVM/y1QFGUfydwBSOsxZ6s=的ASCII值给出的字节序列,即就ASN.1而言,完全非类型化的内容
但是RFC6960为nonce扩展指定RFC2560中缺少的ASN.1语法
RFC 6960第1节和第4.4.1节
因此,就ASN.1而言,nonce值必须是八位字节字符串,而不是非类型化的
因此,请尝试将您为nonce选择的值包装在一个八位字节流中,根据扩展定义,该八位字节流将被包装在另一个八位字节流中
所有证书的吊销信息
要使验证在没有其他吊销信息请求的情况下成功,签名必须包含所有相关证书的吊销信息,但受信任的根证书和其他相应标记的证书除外
因此,您不仅需要签名者证书和中间银行证书的吊销信息,还需要嵌入式OCSP响应的OCSP证书的吊销信息,除非它们具有id pkix OCSP nocheck扩展
如果我正确读取了ASN.1转储,则您的OCSP证书没有该扩展名。因此,Adobe Reader将尝试在线接收其吊销信息,如果这不起作用,它将不会使用嵌入的OCSP响应
OCSP服务TLS证书
因为您的签名并没有带来所有必需的撤销信息。AdobeReader尝试在线接收它们。这样做时,它会出错
我得到的详细错误信息如下
证书对于该用法无效____________________________________________________________
证书对于该用法无效____________________________________________________________
SSL证书错误
事实上,在尝试手动访问OCSP服务器的URL时,我还被告知证书问题
您似乎遇到了不同的错误。您是否在计算机或Adobe Reader上安装并信任某些特殊证书?查看此线程。。。joelgeraci:谢谢,但是他们正在讨论AdobeReader9.X和BER解码错误中的错误——和我遇到的问题不一样。谢谢你的回答。你能看看我问题中的编辑2,看看我是否理解正确吗?如果是这样,它似乎不是验证错误的罪魁祸首。@benwixen您正确地理解了我;许多实现者都犯过这个错误。已经澄清了,我将编辑答案,以讨论为什么修复不足以解决问题。非常感谢您的回答。事实证明,它现在基本上是不可修复的,但提供商正在进行一些更新,这些更新应该可以解决我的问题 未来