我使用PADES LTV Profile簽署文檔。 Signer庫是基於Pdfbox庫編寫的。使OCSP響應唯一
我有一個問題。
在PADES LTV配置文件中,必須在線檢查最終修訂版(這意味着此修訂版的OCSP響應,CRLS和證書不得在文檔安全存儲區(DSS)中)。
爲了測試,我在文檔中添加了12個修訂版本。
當我添加新修訂每次,我做不添加證書,這當前修訂的DSS的OCSP響應。我將以前的版本證書和ocsp響應添加到DSS。我這樣做是因爲上次修訂版必須在線登記。所以我不能將最後一次修訂的OCSP響應添加到DSS。我這樣做,但有時Adobe Reader認爲最後一次修訂版本有嵌入式 OCSP在文檔中的響應。
問題可能在於以下幾點:
每個OCSP響應必須即使當我們生成它們使用相同的證書是唯一的。換句話說,如果我們要求ocsp對象兩次,它們必須是唯一的。
爲此,我做以下,但它不工作:
private OCSPReq buildOcspRequest(X509Certificate issuerCert, BigInteger serialNumber, File inputDocument) {
InputStream is = new FileInputStream(inputDocument);
X509CertificateHolder certificateHolder;
certificateHolder = new X509CertificateHolder(issuerCert.getEncoded());
CertificateID id = new CertificateID(new BcDigestCalculatorProvider().get(CertificateID.HASH_SHA1), certificateHolder, serialNumber);
OCSPReqBuilder ocspReqBuilder = new OCSPReqBuilder();
ocspReqBuilder.addRequest(id);
DigestCalculatorProvider digestCalculatorProvider;
JcaDigestCalculatorProviderBuilder digestCalcProvBuilder = new JcaDigestCalculatorProviderBuilder().setProvider("BC");
digestCalculatorProvider = digestCalcProvBuilder.build();
// get SHA 256
DigestCalculator digest = digestCalculatorProvider.get(AlgorithmIdentifier.getInstance("2.16.840.1.101.3.4.2.1"));
OutputStream os = digest.getOutputStream();
IOUtils.copy(is, os);
byte[] messageImprint = digest.getDigest();
BigInteger time = BigInteger.valueOf(System.currentTimeMillis());
// time + imprint
byte[] nonce = ArrayUtils.addAll(time.toByteArray(), messageImprint);
Extension extension = new Extension(OCSPObjectIdentifiers.id_pkix_ocsp_nonce, true, nonce);
ocspReqBuilder.setRequestExtensions(new Extensions(extension));
return ocspReqBuilder.build();
}
這是測試PDF鏈接SAMPLE PDF
我可能會創建4個版本,一切都可能是沒事的......我不不知道,有時候會發生......當我進行測試時,當我創建很多修訂時,問題就會發生...... 最後的修訂讓我想起OCSP對以前版本的反應是它自己的!
「最新的」文檔時間戳應該在當前時間進行驗證,並使用當前收集的驗證數據。「但是,爲了在當前時間收集數據,您必須在線檢查它(4.3驗證過程)。不是嗎? :)我明白這一點,所以... – grep
我可能不會每次都阻止。例如,如果我在文檔中有10個修訂版。和「最新」的一個正在檢查在線。如果我在DSS中添加新版本而不添加證書,ocsps和crls,則以前的版本不會啓用LTV。另外,如果我添加了一些ocsp,那麼需要先前修訂的crls才能啓用LTV,這可能會使「最新」版本的LTV啓用。 總之,沒有辦法防止這種情況...如果我需要防止這種情況發生,我不能在當前時間向文檔添加時間戳(直到nextUpdate)。不是嗎? – grep
*但是,爲了在當前時間收集數據,你必須在網上檢查它(4.3驗證過程)* - 不,它表示**應**,這與**必須**不同。 – mkl