私は署名付きPDFを生成するためにiTextSharp 5.5.10を使用しています。特に、私は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
ありがとうございます。あなたの解決策はOKです。しかし、OCSPの回答は必ずしも短命ではありません。数分から数日です。私の場合、それは10日間です!だから私はiTextがこの問題のための標準的な解決策を与えるべきだと思う... – AEC
10日間のOCSPの応答?うわー!さて、その場合、私はあなたがキャッシュしたいと理解しています。私は数分以下の生涯しか慣れていない。 – mkl