/* * Copyright (c) Contributors, http://www.nsl.tuis.ac.jp * */ using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Xml; using System.Net; using System.Net.Security; using System.Text; using System.Reflection; using System.Security.Cryptography.X509Certificates; using log4net; namespace NSL.Certificate.Tools { // public class NSLCertificateVerify { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private X509Chain m_chain = null; private X509Certificate2 m_cacert = null; private Mono.Security.X509.X509Crl m_clientcrl = null; public NSLCertificateVerify() { m_chain = null; m_cacert = null; m_clientcrl = null; } public NSLCertificateVerify(string certfile) { SetPrivateCA(certfile); } public NSLCertificateVerify(string certfile, string crlfile) { SetPrivateCA (certfile); SetPrivateCRL(crlfile); } public void SetPrivateCA(string certfile) { try { m_cacert = new X509Certificate2(certfile); } catch (Exception ex) { m_cacert = null; m_log.ErrorFormat("[SET PRIVATE CA]: CA File reading error [{0}]. {1}", certfile, ex); } if (m_cacert!=null) { m_chain = new X509Chain(); m_chain.ChainPolicy.ExtraStore.Add(m_cacert); m_chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck; m_chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag; } } public void SetPrivateCRL(string crlfile) { try { m_clientcrl = Mono.Security.X509.X509Crl.CreateFromFile(crlfile); } catch (Exception ex) { m_clientcrl = null; m_log.ErrorFormat("[SET PRIVATE CRL]: CRL File reading error [{0}]. {1}", crlfile, ex); } } // // // public bool CheckPrivateChain(X509Certificate2 cert) { if (m_chain==null || m_cacert==null) { return false; } bool ret = m_chain.Build((X509Certificate2)cert); if (ret) { return true; } for (int i=0; i