在签名时在 pdf 中添加撤销详细信息

add revocation detail in pdf while signing same

我已经使用 library itext sharp 附加在 pc 上的数字令牌对 pdf 进行了数字签名,当我在 adobe 中打开它时 reader 它显示无法执行撤销,然后当我看到详细信息时它表明未检查其中一个颁发者证书的吊销错误:BER 解码时遇到错误。

我的普通签名 pdf 的路径:https://www.sendspace.com/file/vqgl53

作为一个解决方案,我认为如果我可以在文档(我的普通签名 pdf)中添加 CRL 信息本身,那么我就不会遇到这个问题。所以我添加了这个答案中提到的代码:

但我在网上遇到异常:addLtvForChain(null, ocspClient, crlClient, getCrlHashKey(crlBytes));

在子方法中 getCrlHashKey 在第一行:X509Crl crl = new X509Crl(CertificateList.GetInstance(crlBytes));

例外说:

Unknown object in GetInstance: Org.BouncyCastle.Asn1.DerApplicationSpecific Parameter name: obj

请进一步建议。

正在扩展 AdobeLtvEnabling

异常的原因是对于一个证书,关联的 CRL 是 base64 编码的,AdobeLtvEnabling class 不期望(这里的期望是检索二进制版本,不需要解码).

您可以按如下方式扩展 AdobeLtvEnabling 以也能够处理 base64 编码的 CRL:搜索 AdobeLtvEnabling 方法 addLtvForChain 并替换 CRL 处理循环

Console.WriteLine("  with {0} CRLs\n", crl.Count);
foreach (byte[] crlBytes in crl)
{
    validationData.crls.Add(crlBytes);
    addLtvForChain(null, ocspClient, crlClient, getCrlHashKey(crlBytes));
}

有了这个:

Console.WriteLine("  with {0} CRLs\n", crl.Count);
foreach (byte[] crlBytes in crl)
{
    PdfName hashKey = null;
    byte[] bytes = null;
    try
    {
        hashKey = getCrlHashKey(crlBytes);
        bytes = crlBytes;
    }
    catch (Exception e)
    {
        Console.WriteLine("  CRL decoding exception, assuming Base64 encoding, trying to decode - {0}\n", e.Message);
        bytes = Convert.FromBase64String(new String(Encoding.Default.GetChars(crlBytes)));
        hashKey = getCrlHashKey(bytes);
    }
    validationData.crls.Add(bytes);
    addLtvForChain(null, ocspClient, crlClient, hashKey);
}

不过你的签名

虽然其他 non-root 证书的吊销问题现在指的是嵌入式 CRL,但对于一个证书仍然存在问题,Adobe Reader 中 "SafeScrypt sub-CA for RCAI Class 2 2014 (SAFESCRYPTONLINE_15)" 的吊销选项卡显示

CRL processing error
Issuer: cn=SafeScrypt CA 2014, houseIdentifier=II Floor, Tidel Park, street=No.4, Rajiv Gandhi Salai, Taramani, Chennai, st=Tamil Nadu, postalCode=600 113, ou=Certifying Authority, o=Sify Technologies Limited, c=IN
This update: 20180303183000Z
Next update: 20190303182959Z
CRL has expired or is not yet valid

确实,下一个更新值为 20190303182959Z 的 CRL 已过期,因此,如果没有适当的 POE,现在不能用于验证。所以确实,Adobe Reader 完全正确地指出基于该 CRL(目前由 PKI 服务)它无法确定 non-Revocation.

但是可以从其他信息中得到吗?好吧,OCSP 响应者的证书中有一个 AIA 属性可以替代使用。但是尝试使用它失败了,http://ocsp.safescrypt.com 目前不接受任何请求。所以这不是实际的选择。

总而言之,这使得该 CA 的服务质量出现问题。如果此状态持续存在,您可能需要切换到其他 CA。