private string prepareCrlCache() { string crlCache; if (String.IsNullOrEmpty(_crlUrl)) { return(null); } Uri uri = new Uri(_crlUrl); crlCache = Path.Combine(Logger.LogPath, Uri.UnescapeDataString(uri.Segments[uri.Segments.Length - 1])); if (!File.Exists(crlCache)) { NetTool.CacheUrlResource(_crlUrl, crlCache); } if (!File.Exists(crlCache)) { _errMsg = String.Format("無法下載憑證廢止清單=>{0}", _crlUrl); return(null); } return(crlCache); }
private IntPtr buildCrl() { string crlCache = prepareCrlCache(); if (crlCache == null) { return(IntPtr.Zero); } IntPtr pCrlContext = openCRL(crlCache); if (IntPtr.Zero == pCrlContext) { _errMsg = Win32.Win32.ShowWin32Error(Marshal.GetLastWin32Error()); return(IntPtr.Zero); } Win32.Win32.CRL_CONTEXT crlContext = (Win32.Win32.CRL_CONTEXT)Marshal.PtrToStructure(pCrlContext, typeof(Win32.Win32.CRL_CONTEXT)); Win32.Win32.CRL_INFO crlInfo = (Win32.Win32.CRL_INFO)Marshal.PtrToStructure(crlContext.pCrlInfo, typeof(Win32.Win32.CRL_INFO)); DateTime crlUpdate = DateTime.FromFileTime(((long)crlInfo.NextUpdate.dwHighDateTime << 32) + (long)crlInfo.NextUpdate.dwLowDateTime); if (crlUpdate < DateTime.Now) { Win32.Win32.CertFreeCRLContext(pCrlContext); NetTool.CacheUrlResource(_crlUrl, crlCache); if (!File.Exists(crlCache)) { _errMsg = String.Format("無法讀取載憑證廢止清單=>{0}", crlCache); return(IntPtr.Zero); } pCrlContext = openCRL(crlCache); if (IntPtr.Zero == pCrlContext) { _errMsg = Win32.Win32.ShowWin32Error(Marshal.GetLastWin32Error()); return(IntPtr.Zero); } } return(pCrlContext); }