我使用在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
请进一步提出建议。
答案 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。