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

时间:2019-06-05 10:34:07

标签: c# pdf itext digital-signature certificate-revocation

我使用在PC上附加的数字令牌使用libarary itext Sharp进行了数字签名,以添加pdf,当我在Adobe Reader中打开它时,它表明无法执行撤销;当我看到详细信息时,它表明发行者证书的吊销未检查错误:BER解码时遇到错误。

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

作为一种解决方案,我认为如果可以在文档(我的纯正签名的pdf)中添加CRL信息本身,那么我就不会遇到这个问题。因此,我添加了此ans中提到的代码:I want to sign a pdf document with ITextSharp and return ltv pdf enabled file

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

在第一行的SUBMETHOD getCrlHashKey中:X509Crl crl =新的X509Crl(CertificateList.GetInstance(crlBytes));

异常说:GetInstance中的未知对象:Org.BouncyCastle.Asn1.DerApplicationSpecific 参数名称:obj

请进一步提出建议。

1 个答案:

答案 0 :(得分:0)

扩展AdobeLtvEnabling

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

您可以如下扩展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);
}
但是,

您的签名

虽然当前其他有问题的非根证书的撤销是指嵌入式CRL,但是对于一个证书仍然存在问题,Adobe Reader中“ RCAI 2类2014(SAFESCRYPTONLINE_15)的SafeScrypt子CA的撤销”选项卡表演

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服务),它无法确定未撤销。

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

所有这些都使得该CA的服务质量令人怀疑。如果此状态持续,则可能要切换到其他CA。