在验证签名的上下文中,我希望在文档签名时验证签名证书的有效性。我意识到,如果我指定了过去的日期,则不使用CRL撤销检查方法,而如果我使用了当前时间或null,则撤销检查工作正常。我正在使用下一个代码
CertificateFactory cf = CertificateFactory.getInstance( "X.509" );
CertPath certPath = cf.generateCertPath( certs );
CertPathValidator cpv = CertPathValidator.getInstance( "PKIX", "SUN" );
PKIXParameters params = new PKIXParameters( ks );
params.setDate( signingTime );
params.setRevocationEnabled( true );
cpvResult = (PKIXCertPathValidatorResult) cpv.validate( certPath, params );
我已经启用了系统属性EnabledCRLDP。此外,OCSP不是一个通用的解决方案,因为它在某些证书中不起作用。
有什么理由不在过去的验证中使用CRL撤销方法?
在这种情况下,有什么方法可以强制使用CRL?
证书颁发机构仅具有证书的当前状态。无法在过去日期请求状态:CA可能已删除在该日期颁发的CRL,或者如果证书已过期,甚至所有记录都可能已清理
因此,只能使用在该日期发布的CRL或OCSP执行过去时间验证。你需要保留撤销证据以及将来使用的签名。(有特定的数字签名格式,旨在包含撤销证据,如AdES)
我怀疑CertPathValidator
的底层实现是在提供过去日期的情况下禁用CRL请求。请注意,PKIX没有定义如何检查吊销。请参阅官方Java安全指南
方法允许调用方禁用撤销检查。默认情况下启用撤销检查,因为它是PKIX验证算法的必需检查。但是,PKIX没有定义如何检查撤销。例如,实现可以使用CRL或OCSP。
使用Java8,您可以使用
params.setCertStores(certStoreList);. //store containing crls
PKIXRevocationChecker rc = (PKIXRevocationChecker)cpv.getRevocationChecker();
rc.setOcspResponses(responses)
但是正如你所说,这种方法不适用于java 6,所以我认为你可以禁用撤销检查,并在验证认证链后手动实现OCSP和CRL验证。
例如,使用此命令可以使用CRL验证证书
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509CRL crl = (X509CRL)cf.generateCRL(inStream);
crl.isRevoked(certificate);
OCSP响应可以使用bouncyCastle处理。请参见此问题OCSP响应不提供证书状态(省略请求ocsp的部分,因为您应该存储本地响应)
我正在设置一个验证器,可以检查签名的有效性。 我所做的签名基于DSS级别LT,因此文档中内置了撤销检查。 我现在遇到的问题是在我在iText中开发的验证器级别上。它允许验证签名的有效性,但允许验证撤销的信息。根据我的研究,ITexts允许基于pkcs7.getCrl()验证签名本身中的信息。 然而,DSS签名将撤销信息纳入字典。 下面是我用来验证签名的代码:
我在理解OpenSSL的签名和验证过程时遇到了一些困难。 我有一个小型证书层次结构:根证书=>子证书=>结束实体证书。我想拥有来自最终实体CA的代码签名证书,因此创建了一个密钥对并请求CSR: 非常感谢。
我想在客户端设备上使用通过Ed25519生成的私钥对JWS(json web签名)进行签名。然后将这个签名发送到我的后端,并用公钥验证它。为了熟悉这个过程,我想尝试在node js中对JWS进行签名和验证 我的私钥和公钥都已生成,可以在base58中使用。这是我目前使用Ed25519私钥签署JWT的尝试: 密钥必须是KeyObject或CryptoKey类型之一。收到一个Uint8Array的实例
我正在尝试使用C#和内置的加密库来验证使用EC密钥SHA256创建的签名。 我使用openssl创建了一个私钥和相应的证书: 以下是我正在使用的密钥(别担心,它们并不重要): 然后,我有一个包含字符串“Hello”的简单数据文件。然后,我使用openssl对该文件进行签名,如下所示: 然后,我可以通过首先从证书中提取公钥,然后使用公钥来验证签名: 然后,我尝试使用 C#(.NET Core 3.1
正如标题所说,我想知道给定的PDF文件是否已经过数字签名。 我用iText签署了它,但我不知道它是否已经签署,以最终辞职或采取其他行动。 有没有简单的方法(可能使用iText)?
我有一个包含EC私钥的文件: 我有一个证书,它的公钥对应于私钥: 在 pem 格式中: 以txt格式: 我正在努力完成两件事: < li >使用ecdsa-with-SHA256签名算法使用私钥对字节数组进行签名 < li >使用证书中的公钥验证签名是否正确 我尝试过使用充气城堡图书馆。这是我到目前为止所拥有的。我的断言是失败的。