0
我使用iTextSharp 5.5.10來生成簽名的PDF。特別是,我需要LTV簽名。 LTV可以通過CRL和OCSP請求完成。如何緩存iTextSharp(LTV簽名)的OCSP響應?
我有這樣的代碼做了它:
IOcspClient ocspClient = new OcspClientBouncyCastle();
ICrlClient crlClient = new CrlClientOnline(myCert.Chain);
List<ICrlClient> lstCrlClients = new List<ICrlClient> { crlClient };
MakeSignature.SignDetached(sap, signature, this.myCert.Chain, lstCrlClients, ocspClient, null, 0, CryptoStandard.CMS);
的問題是:我登錄了很多很多PDF(總是以相同的證書)。所以,我不想每次都做CRL和OCSP請求,我必須「緩存」它們。
我設法用這種代碼(它依賴於C#的MemoryCache)來緩存CRL:
private List<ICrlClient> GetCachedListCrlClient()
{
var key = "LstCrlClient";
List<ICrlClient> lstCrlClients = MyGlobalCachingProvider.GetItem<List<ICrlClient>>(key);
if (lstCrlClients == null)
{
lstCrlClients = new List<ICrlClient>();
for (int i = 0; i < myCert.Chain.Length; i++)
{
String crlUrl = CertificateUtil.GetCRLURL(myCert.Chain[i]);
if (crlUrl != null)
{
byte[] crlDownloaded = new System.Net.WebClient().DownloadData(crlUrl);
ICrlClient crlClient = new CrlClientOffline(crlDownloaded);
lstCrlClients.Add(crlClient);
}
}
MyGlobalCachingProvider.AddItem(key, lstCrlClients, DateTime.Now.AddHours(2));
}
return lstCrlClients;
}
我卻無法找到任何解決方案緩存OCSP響應。有人有線索嗎?
OCSP響應通常只有很短的時間去生活。因此,通常緩存它們是不值得的。如果您在短時間內簽署非常多的PDF,您可能需要實施類似於「CrlClientOffline」的「OcspClientOffline」。看看代碼,這是微不足道的。 – mkl
謝謝。你的解決方案是好的。然而,OCSP的迴應並不總是短暫的:幾分鐘到幾天。就我而言,這是10天!所以我認爲iText應該爲我們提供這個問題的標準解決方案... – AEC
10天OCSP響應?哇!好吧,在這種情況下,我確實知道你想要緩存。我只習慣不超過幾分鐘的生活時間。 – mkl